首页 > 解决方案 > 是否可以防止删除但不能使用外键插入?

问题描述

我有两个表,我想用单列外键链接。一个普通的亲子类型的东西。我要解决的问题是系统的性质是孩子可以在父母存在之前到达(孩子知道父母的身份是什么)。

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

我假设我不能用 Postgresql 中的常规外键来实现这一点?是编写某种触发器的解决方案吗?

标签: postgresqlreferential-integrity

解决方案


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

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

然后,您可以set constraints在事务中使用来临时推迟约束,如下所示:

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

推荐阅读