sql - 可延迟最初在 postgresql 中延迟

标签 sql foreign-keys postgresql deferrable-constraint

我在 2 个表上有一个循环外键,所以我使用 deferrable initially deferred 如下:

uni=# create table vorlesungen (vnr integer primary key, gelesenvon integer);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "vorlesungen_pkey" for table "vorlesungen"
CREATE TABLE
uni=# create table professoren (pnr integer primary key, lieblingsvo integer);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "professoren_pkey" for table "professoren"
CREATE TABLE
uni=# alter table professoren add constraint vfk foreign key (lieblingsvo) references vorlesungen (vnr) deferrable initially deferred;
ALTER TABLE
uni=# alter table vorlesungen add constraint pfk foreign key (gelesenvon) references professoren (pnr) deferrable initially deferred;
ALTER TABLE

到目前为止一切顺利。 但是现在当我想插入到表中时,我得到了外键违规,尽管我指定了 deferrable initially deferred:

uni=# insert into vorlesungen values (1, 1);
ERROR:  insert or update on table "vorlesungen" violates foreign key constraint "pfk"
DETAIL:  Key (gelesenvon)=(1) is not present in table "professoren".

uni=# insert into professoren values (1, 1);
ERROR:  insert or update on table "professoren" violates foreign key constraint "vfk"
DETAIL:  Key (lieblingsvo)=(1) is not present in table "vorlesungen".

有什么问题吗?

最佳答案

您是否在 插入?如果不使用 BEGIN,每个插入都是一个独立的事务,因此在每个命令的末尾强制执行外键。

关于sql - 可延迟最初在 postgresql 中延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5697611/

相关文章:

mysql - SQL Null 作为 0 并使用 Left Join?

c# - 必须使用 Select 语句声明标量变量错误 C# ASP.NET Sql 命令

c# - 在使用 EF Core 时使用 [ForeignKey] 访问相关表而实际上在数据库中没有外键

sql - 尝试优化嵌套的 PostgreSQL WHERE IN

php - SQL 中跳过 0 和 NULL

c# - 在不知道 sqlDbType 的情况下将 DBNull.Value 与 SqlParameter 一起使用?

mysql - 如何为一组表生成 ADD FOREIGN KEY 语句?

java - 外键引用目标不存在

python - 从 model.save() 中删除关联的模型实例不起作用

postgresql - 如何在尊重其原始顺序的同时对不同的值进行编号?