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

doppelter postgresql-Schlüssel verstößt gegen Eindeutigkeitsbeschränkung

In diesem Artikel wird erläutert, dass Ihre Sequenz möglicherweise nicht mehr synchron ist und Sie sie manuell wieder synchronisieren müssen.

Ein Auszug aus dem Artikel, falls sich die URL ändert:

Wenn Sie diese Meldung erhalten, wenn Sie versuchen, Daten in eine PostgreSQL-Datenbank einzufügen:

ERROR:  duplicate key violates unique constraint

Das bedeutet wahrscheinlich, dass die Primärschlüsselsequenz in der Tabelle, mit der Sie arbeiten, irgendwie nicht mehr synchron ist, wahrscheinlich aufgrund eines Massenimport-Prozesses (oder etwas in der Art). Nennen Sie es ein "Bug Bydesign", aber es scheint, dass Sie den Primärschlüsselindex nach dem Wiederherstellen aus einer Dump-Datei manuell zurücksetzen müssen. Um zu sehen, ob Ihre Werte nicht synchron sind, führen Sie auf jeden Fall diese beiden Befehle aus:

SELECT MAX(the_primary_key) FROM the_table;   
SELECT nextval('the_primary_key_sequence');

Wenn der erste Wert höher als der zweite Wert ist, ist Ihre Sequenz nicht synchron. Sichern Sie Ihre PG-Datenbank (nur für den Fall) und führen Sie dann diesen Befehl aus:

SELECT setval('the_primary_key_sequence', (SELECT MAX(the_primary_key) FROM the_table)+1);

Dadurch wird die Sequenz auf den nächsten verfügbaren Wert gesetzt, der höher ist als jeder vorhandene Primärschlüssel in der Sequenz.