sql >> Database >  >> RDS >> PostgreSQL

postgresql dubbele sleutel schendt unieke beperking

In dit artikel wordt uitgelegd dat uw reeks mogelijk niet gesynchroniseerd is en dat u deze handmatig opnieuw moet synchroniseren.

Een fragment uit het artikel voor het geval de URL verandert:

Als u deze melding krijgt wanneer u gegevens probeert in te voegen in een PostgreSQL-database:

ERROR:  duplicate key violates unique constraint

Dat betekent waarschijnlijk dat de volgorde van de primaire toetsen in de tabel waarmee u werkt op de een of andere manier niet meer gesynchroniseerd is, waarschijnlijk vanwege een massaimportproces (of iets in die richting). Noem het een "bug bydesign", maar het lijkt erop dat je de primaire sleutelindex handmatig moet resetten na het herstellen vanuit een dumpbestand. Voer in ieder geval deze twee opdrachten uit om te zien of uw waarden niet synchroon lopen:

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

Als de eerste waarde hoger is dan de tweede waarde, is uw reeks niet gesynchroniseerd. Maak een back-up van uw PG-database (voor het geval dat) en voer vervolgens deze opdracht uit:

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

Dat stelt de reeks in op de volgende beschikbare waarde die hoger is dan een bestaande primaire sleutel in de reeks.



  1. WSJDBCConnection verpakt geen objecten van het type Oracle jdbc Connection

  2. SUBTIME() Voorbeelden – MySQL

  3. PostgreSQL Waar tellen voorwaarde

  4. Een model verplaatsen tussen twee Django-apps (Django 1.7)