Postgres quyết định kiểm tra các ràng buộc thuộc loại IMMEDIATELY
vào thời điểm khác với thời điểm được đề xuất trong tiêu chuẩn SQL.
Cụ thể, tài liệu cho SET CONSTRAINTS
trạng thái (nhấn mạnh của tôi):
Postgres chọn thực hiện truy vấn này bằng cách sử dụng một kế hoạch dẫn đến xung đột tạm thời cho sort_order
và NGAY LẬP TỨC không thành công. Lưu ý rằng điều đó có nghĩa là đối với cùng một lược đồ và cùng một dữ liệu, cùng một truy vấn có thể hoạt động hoặc không thành công tùy thuộc vào kế hoạch thực thi.
Bạn sẽ phải thực hiện ràng buộc DEFERRABLE
hoặc DEFERRABLE INITIALLY DEFERRED
, điều này sẽ trì hoãn việc xác minh ràng buộc cho đến khi kết thúc giao dịch hoặc đến thời điểm mà một câu lệnh SET CONSTRAINTS ... IMMEDIATE
được thực thi.
Phụ lục từ bình luận của @ HansGinzel: