PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Doppelte Spalte nach dem Wechsel vom seriellen zum Identitätsdatentyp in PostgreSQL / pgAdmin4

Nach langem Suchen habe ich folgendes gefunden:

Es gibt tatsächlich nur eine Spalte, die mit psql bestätigt werden kann. Verwenden Sie jedoch den Befehl pg_dump -st names <databasename> Von bash bemerkte ich, dass 2 Sequenzen definiert wurden, die der ID-Spalte zugeordnet waren:public.names_id_seq und public.names_id_seq1 .

Dies kann auch durch Ausführen von SELECT c.relname FROM pg_class c WHERE c.relkind = 'S'; bestätigt werden aus psql, wo beide Sequenzen auftauchen.

Versucht man public.names_id_seq1 zu löschen man erhält den Fehler ERROR: cannot drop sequence apis_id_seq1 because column id of table apis requires it .

Die Lösung ist die erste Sequenz mit DROP SEQUENCE names_id_seq; zu löschen Nach dem Aktualisieren von pgAdmin4 war die zweite Spalte weg.

TL;DR

  1. Führen Sie SELECT c.relname FROM pg_class c WHERE c.relkind = 'S'; aus und identifizieren Sie doppelte Sequenzen (dh diejenigen, bei denen es eine Version mit und eine ohne eine 1 am Ende gibt)

  2. Löschen Sie die überflüssige Sequenz mit DROP SEQUENCE <sequenceName_seq>; (nur die ohne 1 am Ende kann gelöscht werden)

  3. Aktualisieren Sie pgAdmin4