Tenho um banco de dados em Postgresql, que foi migrado do SQL Server (somente dados).
No SQL Server, uma tabela desse banco de dados possui estas colunas:
measure_id
datum
measure
onde measure_id
é chave primária auto-incremental, datum
é datetime e measure
é float.
Após migração no Postrgresql, measure_id
é coluna do tipo bigint.
Como posso alterar essa coluna ( measure_id
) para bigserial e atribuí-la como chave primária, agora que minha tabela está cheia de dados?
Crie uma sequência e use-a como valor padrão para a coluna:
Isso essencialmente o que
serial
faz.Consulte o manual para obter detalhes:
http://www.postgresql.org/docs/current/static/datatype-numeric.html#DATATYPE-SERIAL
A partir do Postgres 10, a maneira recomendada é usar colunas compatíveis com o padrão
identity
, em vez de serial (ou bigserial).Em ambos os casos, você terá que ajustar a sequência para corresponder ao valor máximo atual na
measure_id
coluna:Vejo que a questão já está marcada como resolvida, porém, conforme apontado nos comentários, está faltando o caso em que existem registros existentes que já possuem alguns valores definidos na coluna relevante.
Vou listar alguns outros casos também.
Estou fazendo isso para uma tabela chamada
products
que está presente nopublic
esquema. O auto-incremento está sendo feito para aid
coluna desta tabela.1. Para uma coluna inexistente
2. Para uma coluna existente que não obteve valores na tabela
3. Para uma coluna existente que já possui alguns valores na tabela
Referências de documentação para CREATE SEQUENCE e SETVAL