löst postgresql primäre Schlüsselsequenz Diskrepanzen
Eine primäre Schlüsselsequenz, die mit den Zeilen Ihrer Tabelle falsch ausgerichtet ist, kann frustrierende doppelte Schlüsselfehler verursachen. Dies geschieht häufig bei Datenimporten oder Wiederherstellungen, bei denen die Sequenzintegrität nicht erhalten bleibt. So beheben Sie es:
1. Finde die höchste ID:
Verwenden Sie die Funktion max ()
, um die größte ID in Ihrer Tabelle zu identifizieren:
SELECT MAX(id) FROM your_table;
2. Holen Sie sich den nächsten Wert der Sequenz:
Diese Abfrage zeigt den nächsten Wert der Sequenz:
SELECT nextval('your_table_id_seq');
3. Setzen Sie die Sequenz 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:
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;
Quelle: adaptiert aus einer Ruby Forum -Diskussion.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3