这是这种情况:我有两个表,其中一个引用另一个(例如,table2 引用 table1)。在创建这些表时,我确实将外键约束设置为 DEFERRABLE,并将 ON UPDATE 和 ON DELETE 子句设置为 NO ACTION(这是默认设置)。
但是,在运行下面的事务时,我仍然收到以下错误。
交易:
START TRANSACTION;
SET CONSTRAINTS ALL DEFERRED;
UPDATE table1 SET blah blah;
UPDATE table2 SET blah blah;
COMMIT;
错误:
ERROR: update or delete on table "table1" violates foreign key constraint "table1_column_fkey" on table "table2"
DETAIL: Key (column1)=(blahblah) is still referenced from table "table2".
和表结构:
CREATE TABLE table1(
column1 CHAR(10),
[...]
PRIMARY KEY (column1)
);
CREATE TABLE table2(
primkey CHAR(9),
[...]
column2 CHAR(10) NOT NULL,
PRIMARY KEY(primkey),
FOREIGN KEY(column2) REFERENCES table1(column1) DEFERRABLE
);
我想要做的是在事务进行时推迟外键检查,直到它提交。我只是看不出为什么会返回此错误以及如何使交易正常进行。