如果我定義表a
和b
如下:SET約束的遞延未正常工作中的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);
然後執行以下操作:
START TRANSACTION;
SET CONSTRAINTS ALL DEFERRED;
INSERT INTO b(j) VALUES(2);
INSERT INTO a(i) VALUES(2);
COMMIT;
它產生下面的錯誤。爲什麼SET CONSTRAINTS
沒有達到預期效果?
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".
爲您需要例如箱子另一種解決方案恢復備份將禁用觸發器。請參閱:http://stackoverflow.com/q/3942258/1157054 – Ajedi32 2016-04-08 16:13:17