J'ai rencontré le problème suivant : la séquence de ma clé primaire n'est pas synchronisée avec les lignes de ma table.
En d'autres termes, lorsque j'insère une nouvelle ligne, j'obtiens une erreur de clé dupliquée car la séquence impliquée dans le type de données série renvoie un numéro qui existe déjà.
Il semble être causé par l'importation/restauration qui ne maintient pas la séquence correctement.
1 votes
Je suis curieux est-ce que vous laissez tomber la base de données avant de faire une restauration ? Je me souviens vaguement que cela s'est produit, mais je peux me tromper :P
39 votes
Le wiki de PostgreSQL a une page sur Correction des séquences .
26 votes
Juste pour aider à la googlelisation, le message d'erreur envoyé ici est : "La valeur de la clé dupliquée viole la contrainte d'unicité..."
5 votes
Voici comment sqlsequencereset dans Django le fait : SELECT setval(pg_get_serial_sequence("<nom_table>", 'id'), coalesce(max("id"), 1), max("id") IS NOT null) FROM "<nom_table>" ;
1 votes
La première instance du <nom de la table> doit être entourée de guillemets simples pour que la fonction pg_get_serioal_sequence fonctionne : SELECT setval(pg_get_serioal_sequence('<nom_table>', 'id'), coalesce(max("id"), 1), max("id") IS NOT null) FROM "<nom_table>"
0 votes
Question connexe : stackoverflow.com/questions/62059947/
0 votes
stackoverflow.com/questions/244243/