Heim >Datenbank >MySQL-Tutorial >Wie kann ich eine Postgres-Primärschlüsselsequenz zurücksetzen, die nicht mit Tabellenzeilen synchronisiert ist?
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!