Maison >base de données >tutoriel mysql >Comment puis-je réinitialiser une séquence de clé primaire Postgres non synchronisée avec les lignes du tableau ?

Comment puis-je réinitialiser une séquence de clé primaire Postgres non synchronisée avec les lignes du tableau ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-23 11:41:10302parcourir

How Can I Reset a Postgres Primary Key Sequence Out of Sync with Table Rows?

Résolution des divergences dans la séquence de clé primaire PostgreSQL

Une séquence de clé primaire mal alignée avec les lignes de votre table peut provoquer des erreurs de clé en double frustrantes. Cela se produit souvent lors d’importations ou de restaurations de données où l’intégrité de la séquence n’est pas préservée. Voici comment y remédier :

1. Trouvez l'ID le plus élevé :

Utilisez la fonction MAX() pour identifier le plus grand identifiant de votre table :

<code class="language-sql">SELECT MAX(id) FROM your_table;</code>

2. Obtenez la prochaine valeur de la séquence :

Cette requête affiche la prochaine valeur générée de la séquence :

<code class="language-sql">SELECT nextval('your_table_id_seq');</code>

3. Réinitialiser la séquence (si nécessaire) :

Si la valeur suivante de la séquence est inférieure à l'ID maximum de la table, réinitialisez la séquence dans une transaction pour empêcher les insertions simultanées :

<code class="language-sql">BEGIN;
LOCK TABLE your_table IN EXCLUSIVE MODE;
SELECT setval('your_table_id_seq', (SELECT GREATEST(MAX(your_id), nextval('your_table_id_seq') - 1) FROM your_table));
COMMIT;</code>

Source : Adapté d'une discussion sur le forum Ruby.

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:
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