【发布时间】:2023-03-27 16:33:01
【问题描述】:
create table T1 (
id bigint NOT NULL primary key,
a bigint unique not null
);
create table T2 (
id int not null primary key,
b bigint,
foreign KEY(id) references T1(id) not deferrable
);
alter table T1 add constraint fk_id foreign key (id) references T2(id) not deferrable;
--Statement 1
with ins as (
insert into T1(id, a) values(15, 4) returning id
)
insert into T2(id, b) values(15, 3);
--Statement 2
with ins as (
insert into T2(id, b) values(14, 4) returning id
)
insert into T1(id, a) values(14, 3);
--Statement 3 (gives error)
with upd as (
update T1 set a = 4 where id = 14 returning id
)
update T1 set a = 3 where id = 15;
当这个脚本在 PostgreSQL 中运行时,为什么语句 1 和 2 有效,而只有语句 3 给出了错误,即使两个外键约束都明确不可延迟?
【问题讨论】:
标签: sql postgresql