Heim >Datenbank >MySQL-Tutorial >Wie kann ich eine Postgres-Primärschlüsselsequenz zurücksetzen, die nicht mit Tabellenzeilen synchronisiert ist?

Wie kann ich eine Postgres-Primärschlüsselsequenz zurücksetzen, die nicht mit Tabellenzeilen synchronisiert ist?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-23 11:41:10333Durchsuche

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

Beheben von Diskrepanzen in der PostgreSQL-Primärschlüsselsequenz

Eine Primärschlüsselsequenz, die nicht mit den Zeilen Ihrer Tabelle übereinstimmt, kann zu frustrierenden Fehlern aufgrund doppelter Schlüssel führen. Dies geschieht häufig bei Datenimporten oder -wiederherstellungen, bei denen die Sequenzintegrität nicht gewahrt bleibt. So beheben Sie das Problem:

1. Finden Sie die höchste ID:

Verwenden Sie die Funktion MAX(), um die größte ID in Ihrer Tabelle zu identifizieren:

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

2. Holen Sie sich den nächsten Wert der Sequenz:

Diese Abfrage zeigt den nächsten generierten Wert der Sequenz:

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

3. Setzen Sie die Reihenfolge zurück (falls erforderlich):

Wenn der nächste Wert der Sequenz kleiner als die maximale ID der Tabelle ist, setzen Sie die Sequenz innerhalb einer Transaktion zurück, um gleichzeitige Einfügungen zu verhindern:

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

Quelle: Angepasst aus einer Diskussion im Ruby-Forum.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Postgres-Primärschlüsselsequenz zurücksetzen, die nicht mit Tabellenzeilen synchronisiert ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn