PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Colonna duplicata dopo il passaggio dal tipo di dati seriale a quello di identità in PostgreSQL/pgAdmin4

Dopo lunghe ricerche ecco cosa ho trovato:

C'è infatti solo una colonna che può essere confermata usando psql. Tuttavia, utilizzando il comando pg_dump -st names <databasename> da bash ho notato che c'erano 2 sequenze in fase di definizione associate alla colonna id:public.names_id_seq e public.names_id_seq1 .

Questo può essere confermato anche eseguendo SELECT c.relname FROM pg_class c WHERE c.relkind = 'S'; da psql in cui vengono visualizzate entrambe le sequenze.

Se si tenta di eliminare public.names_id_seq1 si ottiene l'errore ERROR: cannot drop sequence apis_id_seq1 because column id of table apis requires it .

La soluzione è eliminare la prima sequenza con DROP SEQUENCE names_id_seq; Dopo aver aggiornato pgAdmin4, la seconda colonna è scomparsa.

TL;DR

  1. Esegui SELECT c.relname FROM pg_class c WHERE c.relkind = 'S'; e identificare le sequenze duplicate (es. quelle dove c'è una versione con e una senza 1 alla fine)

  2. Elimina la sequenza superflua con DROP SEQUENCE <sequenceName_seq>; (può essere cancellato solo quello senza 1 alla fine)

  3. Aggiorna pgAdmin4