Use
CREATE SEQUENCE
:CREATE SEQUENCE scores_job_id_seq; -- = default name for plain a serial
Em seguida, adicione um padrão de coluna a
scores.job_id
:ALTER TABLE scores ALTER COLUMN job_id SET DEFAULT nextval('scores_job_id_seq');
Se você deseja vincular a sequência para a coluna (para que seja excluída quando a coluna for excluída), também execute:
ALTER SEQUENCE scores_job_id_seq OWNED BY scores.job_id;
Tudo isso pode ser substituído pelo uso do pseudo tipo de dados
serial
para a coluna job_id
começar com:- Renomear tabelas de forma segura e limpa que usam colunas de chave primária serial no Postgres?
Se sua tabela já tiver linhas, você pode querer definir a
SEQUENCE
para o próximo valor mais alto e preencha os valores de série ausentes na tabela: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;
- Como verificar uma sequência de forma eficiente para valores usados e não utilizados no PostgreSQL
- O Postgres altera a sequência manualmente
- Como redefinir a sequência de chave primária do postgres quando ela fica fora de sincronia?
A única diferença restante, um
serial
coluna também está definida como NOT NULL
. Você pode ou não querer isso também:ALTER TABLE scores ALTER COLUMN job_id SET NOT NULL;
Mas você não pode apenas altere o tipo de um
integer
existente :ALTER TABLE scores ALTER job_id TYPE serial;
serial
não é um tipo de dados real. É apenas um recurso de conveniência de notação para CREATE TABLE
.No Postgres 10 ou posterior, considere uma
IDENTITY
coluna:- Coluna da tabela de incremento automático