Nếu tôi xác định các bảng a
và b
như sau:Ràng buộc SET ALL HOÃN không làm việc như mong đợi trong PostgreSQL 9,3
CREATE TABLE a(i integer);
ALTER TABLE a ADD CONSTRAINT pkey_a PRIMARY KEY (i);
CREATE TABLE b(j integer);
ALTER TABLE b add CONSTRAINT fkey_ij FOREIGN KEY (j)
REFERENCES a (i) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE;
INSERT INTO a(i) VALUES(1);
Và sau đó làm như sau:
START TRANSACTION;
SET CONSTRAINTS ALL DEFERRED;
INSERT INTO b(j) VALUES(2);
INSERT INTO a(i) VALUES(2);
COMMIT;
Nó tạo ra những lỗi dưới đây. Tại sao SET CONSTRAINTS
không có hiệu ứng mong muốn?
ERROR: insert or update on table "b" violates foreign key constraint "fkey_ij"
SQL state: 23503 Detail: Key (j)=(2) is not present in table "a".
Một giải pháp thay thế cho trường hợp bạn ví dụ khôi phục bản sao lưu sẽ là tắt trình kích hoạt. Xem: http://stackoverflow.com/q/3942258/1157054 – Ajedi32