DBAtlas · Atlas für Datenbankbetrieb

40002: transaction_integrity_constraint_violation

PostgreSQL

Was bedeutet das?

Der SQL-Standardcode für die Verletzung eines am Transaktionsende geprüften Integritäts-Constraints beim COMMIT. Wichtig: PostgreSQL erzeugt diesen Code in der Praxis nicht; es liefert Verletzungen verzögerter (DEFERRED) Constraints beim COMMIT mit dem eigenen Code des Constraints: 23503 für Foreign Keys, 23505 für Eindeutigkeit.

Ursache

Ein DEFERRABLE INITIALLY DEFERRED definierter Foreign-Key- oder Unique-Constraint wurde in Zwischenschritten der Transaktion vorübergehend verletzt und bis zum COMMIT nicht korrigiert; in PostgreSQL wird das als 23503/23505 gemeldet. Zum Beispiel führt das Einfügen sich gegenseitig referenzierender Zeilen in falscher Reihenfolge ohne anschließende Korrektur dazu.

Lösung

Korrigiere die Transaktionslogik so, dass alle verzögerten Constraints vor dem COMMIT erfüllt sind (fehlende Referenzen ergänzen, Konflikte auflösen). Prüfe den Constraint bei Bedarf früh innerhalb der Transaktion mit SET CONSTRAINTS ... IMMEDIATE, um den problematischen Schritt eher zu erkennen. Ordne Inserts/Updates bei gegenseitigen Referenzen neu.

In DBAtlas öffnen →

Weitere Einträge zu dieser Datenbank