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 ?

Comment resynchroniser une séquence de clé primaire PostgreSQL non synchronisée avec les lignes d'une table ?

DDD
Libérer: 2025-01-23 12:09:11
original
465 Les gens l'ont consulté

How Do I Resynchronize a PostgreSQL Primary Key Sequence Out of Sync with Table Rows?

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 :

  1. Confirmer le déséquilibre de séquence :

    Tout d'abord, déterminez l'ID existant le plus élevé :

    1

    SELECT MAX(id) FROM your_table;

    Copier après la connexion
  2. Examinez le numéro de séquence suivant :

    Ensuite, vérifiez la valeur suivante de la séquence :

    1

    SELECT nextval('your_table_id_seq');

    Copier après la connexion

    Si la valeur de séquence est inférieure à l'ID maximum de la table, une synchronisation est requise.

  3. Commencer la transaction :

    Enveloppez la correction dans une transaction pour l'intégrité des données :

    1

    BEGIN;

    Copier après la connexion
  4. Verrouillage de table exclusif :

    Pour éviter les modifications simultanées, verrouillez exclusivement la table :

    1

    LOCK TABLE your_table IN EXCLUSIVE MODE;

    Copier après la connexion
  5. Ajuster la valeur de la séquence :

    Utilisez cette commande pour mettre à jour la séquence :

    1

    SELECT setval('your_table_id_seq', GREATEST((SELECT MAX(your_id) FROM your_table), (SELECT nextval('your_table_id_seq') - 1)));

    Copier après la connexion

    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.

  6. Commettre la transaction :

    Finaliser les modifications :

    1

    COMMIT;

    Copier après la connexion
  7. 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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal