Postgres se rozhodne zkontrolovat omezení typu IMMEDIATELY
v jiném čase, než je navrženo ve standardu SQL.
Konkrétně dokumentace pro SET CONSTRAINTS
uvádí (důraz můj):
Postgres se rozhodl provést tento dotaz pomocí plánu, který má za následek dočasnou kolizi pro sort_order
a OKAMŽITĚ selže. Upozorňujeme, že pro stejné schéma a stejná data může stejný dotaz fungovat nebo selhat v závislosti na plánu provádění.
Budete muset nastavit omezení DEFERRABLE
nebo DEFERRABLE INITIALLY DEFERRED
, což zdržuje ověření omezení až do konce transakce nebo až do bodu, kdy se zobrazí příkaz SET CONSTRAINTS ... IMMEDIATE
se provede.
Dodatek z komentáře @HansGinzel: