Maison >base de données >tutoriel mysql >Comment resynchroniser une séquence de clé primaire PostgreSQL non synchronisée avec les lignes d'une table ?
Résoudre les conflits de séquence de clé primaire PostgreSQL
Les échecs d'insertion de données dus à des erreurs de clé en double indiquent souvent une séquence de clé primaire désynchronisée avec les lignes de la table. Cela se produit généralement après les processus d’importation ou de restauration de base de données. Voici comment rectifier cela :
Confirmer le déséquilibre de séquence :
Tout d'abord, déterminez l'ID existant le plus élevé :
<code class="language-sql">SELECT MAX(id) FROM your_table;</code>
Examinez le numéro de séquence suivant :
Ensuite, vérifiez la valeur suivante de la séquence :
<code class="language-sql">SELECT nextval('your_table_id_seq');</code>
Si la valeur de séquence est inférieure à l'ID maximum de la table, une synchronisation est requise.
Commencer la transaction :
Enveloppez la correction dans une transaction pour l'intégrité des données :
<code class="language-sql">BEGIN;</code>
Verrouillage de table exclusif :
Pour éviter les modifications simultanées, verrouillez exclusivement la table :
<code class="language-sql">LOCK TABLE your_table IN EXCLUSIVE MODE;</code>
Ajuster la valeur de la séquence :
Utilisez cette commande pour mettre à jour la séquence :
<code class="language-sql">SELECT setval('your_table_id_seq', GREATEST((SELECT MAX(your_id) FROM your_table), (SELECT nextval('your_table_id_seq') - 1)));</code>
Cela définit la séquence sur le plus grand entre l'ID maximum de la table ou la valeur de séquence actuelle moins un.
Commettre la transaction :
Finaliser les modifications :
<code class="language-sql">COMMIT;</code>
Libérer le verrouillage de la table :
Le verrou de la table est automatiquement libéré après la validation de la transaction.
Suivre ces étapes garantit que la séquence de clé primaire s'aligne sur les données de la table, éliminant ainsi les futures erreurs de clé en double lors des insertions.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!