Usa CREATE SEQUENCE
:
CREATE SEQUENCE scores_job_id_seq; -- = default name for plain a serial
Luego agregue una columna predeterminada a scores.job_id
:
ALTER TABLE scores ALTER COLUMN job_id SET DEFAULT nextval('scores_job_id_seq');
Si desea vincular la secuencia a la columna (para que se elimine cuando se elimine la columna), también ejecute:
ALTER SEQUENCE scores_job_id_seq OWNED BY scores.job_id;
Todo esto se puede reemplazar con el uso del tipo de datos pseudo serial
para la columna job_id
para empezar:
- ¿Renombrar de forma segura y limpia las tablas que usan columnas de clave primaria serial en Postgres?
Si su tabla ya tiene filas, es posible que desee establecer la SEQUENCE
al siguiente valor más alto y complete los valores de serie que faltan en la tabla:
SELECT setval('scores_job_id_seq', COALESCE(max(job_id), 1)) FROM scores;
Opcionalmente:
UPDATE scores
SET job_id = nextval('scores_job_id_seq')
WHERE job_id IS NULL;
- Cómo verificar una secuencia de manera eficiente para valores usados y no usados en PostgreSQL
- Postgres modifica manualmente la secuencia
- ¿Cómo restablecer la secuencia de clave principal de Postgres cuando no está sincronizada?
La única diferencia restante, un serial
la columna también se establece en NOT NULL
. Puede o no querer eso también:
ALTER TABLE scores ALTER COLUMN job_id SET NOT NULL;
Pero usted no puede simplemente modifique el tipo de un integer
existente :
ALTER TABLE scores ALTER job_id TYPE serial;
serial
no es un tipo de datos real. Es solo una función de conveniencia notacional para CREATE TABLE
.
En Postgres 10 o posterior considere una IDENTITY
columna:
- Columna de tabla de incremento automático