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

la chiave duplicata postgresql viola il vincolo univoco

Questo articolo spiega che la sequenza potrebbe non essere sincronizzata e che devi ripristinarla manualmente.

Un estratto dall'articolo nel caso in cui l'URL cambi:

Se ricevi questo messaggio quando tenti di inserire dati in un database PostgreSQL:

ERROR:  duplicate key violates unique constraint

Ciò probabilmente significa che la sequenza di chiavi primarie nella tabella con cui stai lavorando è in qualche modo non sincronizzata, probabilmente a causa di un processo di importazione di massa (o qualcosa del genere). Chiamalo un "bug in base alla progettazione", ma sembra che tu debba reimpostare manualmente l'indice di una chiave primaria dopo il ripristino da un file di dump. Ad ogni modo, per vedere se i tuoi valori non sono sincronizzati, esegui questi due comandi:

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

Se il primo valore è maggiore del secondo valore, la sequenza non è sincronizzata. Eseguire il backup del database PG (per ogni evenienza), quindi eseguire questo comando:

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

Ciò imposterà la sequenza sul successivo valore disponibile che è superiore a qualsiasi chiave primaria esistente nella sequenza.