PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Coluna duplicada após alternar do tipo de dados serial para identity no PostgreSQL / pgAdmin4


Depois de uma longa pesquisa aqui está o que eu encontrei:

Na verdade, há apenas uma coluna que pode ser confirmada usando o psql. No entanto, usando o comando pg_dump -st names <databasename> do bash, notei que havia 2 sequências sendo definidas associadas à coluna id:public.names_id_seq e public.names_id_seq1 .

Isso também pode ser confirmado executando SELECT c.relname FROM pg_class c WHERE c.relkind = 'S'; do psql onde ambas as sequências aparecem.

Se alguém tentar excluir public.names_id_seq1 um recebe o erro ERROR: cannot drop sequence apis_id_seq1 because column id of table apis requires it .

A solução é excluir a primeira sequência com DROP SEQUENCE names_id_seq; Depois de atualizar o pgAdmin4, a segunda coluna desapareceu.

TL;DR

  1. Execute SELECT c.relname FROM pg_class c WHERE c.relkind = 'S'; e identificar sequências duplicadas (ou seja, aquelas em que há uma versão com e uma sem 1 no final)

  2. Exclua a sequência supérflua com DROP SEQUENCE <sequenceName_seq>; (somente o sem 1 no final pode ser excluído)

  3. Atualizar pgAdmin4