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: