tentando adicionar auto_increment a uma coluna existente
ALTER TABLE table_name ALTER COLUMN id_column SET DEFAULT nextval('table_id_column_seq');
tente 1:
CREATE SEQUENCE table_id_column_seq AS integer START 1 OWNED BY table.id_column;
Erro:
ERRO: a sequência deve ter o mesmo dono da tabela à qual está vinculada
tente 2:
CREATE SEQUENCE table_id_column_seq AS integer START 1 OWNED TO postgres;
Erro:
ERROR: syntax error at or near "integer"
LINE 1: CREATE SEQUENCE table_id_column_seq integer START 1...
^
Como deveria ser?
Com as versões modernas do Postgres (ou seja, >= 10) é melhor usar
identity
colunas (elas usam sequências em segundo plano).Para transformar uma coluna existente em uma coluna de identidade, você pode usar:
ou
Prefiro o
generated always
como vai passar por um erro se tentar contornar a geração automática de valores.Se a tabela já contém dados, você precisa sincronizar a sequência subjacente com os valores na tabela:
Conforme mencionado na documentação , o
OWNED BY
refere-se à tabela e coluna a que esta sequência pertence, não ao usuário proprietário.Sugiro que você execute
CREATE SEQUENCE
como o usuário que possui a tabela, ou se isso não for possível, altere o proprietário para você mesmo, crie a sequência, depois altere o proprietário da tabela e a sequência de volta para o original.