postgresql - 是否可以防止删除而不是插入外键?

标签 postgresql referential-integrity

我有两个表,我想用单列外键链接它们。正常的亲子类型的东西。我要解决的问题是系统的性质是 child 可以在 parent 存在之前到达( child 知道 parent 的 ID 是什么)。

我不想延迟等待父到达的 child 的插入,速度很重要。但我确实想要一些参照完整性 - 如果子项存在,我不希望能够删除父项。

我假设我无法在 Postgresql 中使用常规外键实现此目的?是写某种触发器的解决方案吗?

最佳答案

您可以使用“可延迟”约束来做到这一点。

create table child (parent_id integer references parent deferrable initially immediate);

然后您可以使用 set constraints在交易中暂时推迟这样的约束:

start transaction;
set constraints all deferred;
-- Your inserts go here --
commit;

关于postgresql - 是否可以防止删除而不是插入外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58990472/

相关文章:

java - Postgres 的搜索路径不适用于 Spring/DBCP 数据源

postgresql - Postgres 在插入初始数据后提示 id 'already exists'?

sql - 如果其他子项未引用父项,则删除父项

MYSQL:无法添加或更新子行:外键约束失败

postgresql - 将本地 postgresql 数据库推送到 heroku : The local psql command could not be located

postgresql - ST_Distance返回值的单位

ms-access - 复合主键级联

sql-server - 强制最大子行数

postgresql - "polymorphism"用于 FOREIGN KEY 约束

sql - Rails SQL "select in"跨多个列 : where (code1, code2) in ( ("A", 1), ("A", 3), ("Q", 9))