PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wann prüft Postgres Unique Constraints?

Postgres beschließt, Einschränkungen des Typs IMMEDIATELY zu prüfen zu einem anderen Zeitpunkt als im SQL-Standard vorgeschlagen.

Insbesondere die Dokumentation für SET CONSTRAINTS Staaten (Hervorhebung von mir):

Postgres führt diese Abfrage mit einem Plan aus, der zu einer vorübergehenden Kollision für sort_order führt und SOFORT scheitert. Beachten Sie, dass für dasselbe Schema und dieselben Daten dieselbe Abfrage je nach Ausführungsplan funktionieren oder fehlschlagen kann.

Sie müssen die Einschränkung DEFERRABLE machen oder DEFERRABLE INITIALLY DEFERRED , wodurch die Überprüfung der Einschränkung bis zum Ende der Transaktion oder bis zu dem Punkt verzögert wird, an dem eine Anweisung SET CONSTRAINTS ... IMMEDIATE wird ausgeführt.

Ergänzung zum Kommentar von @HansGinzel: