Postgres memutuskan untuk memeriksa batasan tipe IMMEDIATELY pada waktu yang berbeda dari yang diusulkan dalam standar SQL.
Secara khusus, dokumentasi untuk SET CONSTRAINTS
menyatakan (penekanan milik saya):
Postgres memilih untuk mengeksekusi kueri ini menggunakan rencana yang menghasilkan tabrakan sementara untuk sort_order dan SEGERA gagal. Perhatikan bahwa artinya untuk skema yang sama dan data yang sama, kueri yang sama dapat berfungsi atau gagal bergantung pada rencana eksekusi.
Anda harus membuat batasan DEFERRABLE atau DEFERRABLE INITIALLY DEFERRED , yang menunda verifikasi kendala hingga akhir transaksi atau sampai pada titik di mana pernyataan SET CONSTRAINTS ... IMMEDIATE dijalankan.
Tambahan dari komentar @HansGinzel: