这是情况:我有两个表,其中一个引用另一个(例如,table2引用表1).创建这些表时,我将外键约束设置为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 );
我想做的是在交易进行时推迟外键检查,直到它提交.我只是看不到为什么这个错误返回,我如何使事务工作.