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: