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
Libérer: 2025-01-23 11:41:10
original
333 Les gens l'ont consulté

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

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

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

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 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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal