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: