【发布时间】:2013-02-07 00:53:40
【问题描述】:
我有两张桌子:
person:
id serial primary key,
name varchar(64) not null
task:
tenant_id integer not null references person (id) on delete cascade,
customer_id integer not null references person (id) on delete restrict
(他们有比这更多的列,但其余的与问题无关。)
问题是,当它的租户person 被删除时,我想级联删除一个task。但是当租户和客户是同一个人时,customer_id外键约束会限制删除。
我的问题分为两部分:
- 暂时禁用第二个外键是我唯一的选择吗?
- 如果是这样,那么我该如何在 PostgreSQL 中做到这一点?
【问题讨论】:
-
表人是自引用的?还是我误会了?
-
@Frederic 是的,我忘了...我已经相应地更新了问题
-
@clapas,当 id =tenant_id 时出现问题?或与应在级联上删除的任何其他寄存器?抱歉,我真的不确定 Postgres,但是 sql-server 女士遇到了类似的问题,当自引用时,sql-server 不允许设置删除级联......我做了一个 cte 来获取所有的 regs在级联上删除并在同一删除语句上全部删除..这样FK没有限制原因确实注册将被一起删除......
-
请说明
person.tenant_id的作用。似乎与问题无关?另外,您谈到了问题的第一部分和第二部分,我无法确定。我看到一个问题。并声明正在使用的 Postgres 的版本。 -
如果要级联删除,为什么
customer_id外键约束上有on delete restrict?啊,我明白了,没关系。
标签: sql database postgresql foreign-keys