加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

设置约束延迟不适用于PostgreSQL事务

发布时间:2020-12-13 16:26:54 所属栏目:百科 来源:网络整理
导读:这是情况:我有两个表,其中一个引用另一个(例如,table2引用表1).创建这些表时,我将外键约束设置为DEFERRABLE,并将ON UPDATE和ON DELETE子句设置为NO ACTION(这是默认值). 但是,当运行下面的事务时,我得到以下错误. 交易: START TRANSACTION;SET CONSTRAINTS
这是情况:我有两个表,其中一个引用另一个(例如,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
);

我想做的是在交易进行时推迟外键检查,直到它提交.我只是看不到为什么这个错误返回,我如何使事务工作.

这个问题确实是一个外键约束违规.我的意思是说,这个限制确实在事务中推迟了,但问题是在事务结束时,在table1和table2被更新之后,新的数据违反了外键约束.我正在更新table1行的主键,它仍然被某些table2行引用.这些行我也必须更新它们,所以table2行的引用列与table1的行的更新的主键匹配.我更改了事务中的“UPDATE”查询,问题解决了.

对不起,让你进入这个.解决方案非常简单,但那天我无法看清.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读