问题描述
我有一个不是我设计的 postgres 数据库,但我有一些表的外键 (FK) 引用了其他一些表的主键 (PK)。我画了一个漂亮的小图表来展示这一点:
所以你可以看到我有 (3) 三个模式,它们会有正常的名称,但为了使这个例子变得简单/简单,我刚刚将它们称为 schema1、schema2 和 schema3。现在,以表A为例,有(3)个外键,分别引用表B、表D和表E 直接。
我从研究/谷歌搜索中期望的行为是,如果您删除父表(具有子表中的外键引用的主键的表),则子表行删除应自动执行。
我没有看到这种行为 - 也就是说,如果我从 表 A 中删除一条记录,该记录引用 (3) 其他三个表(表 B、表 D 和表 E),则表 A 中的记录被删除,但其他表中的所有记录都保留。
我希望能够以最简单的方式删除记录,并让所有其他引用的表也自动删除。我怎样才能做到这一点?
解决方法
相关行不会被自动删除;如果删除一行会使数据库不一致,则默认操作是抛出错误。
如果要删除依赖行,则必须使用 ON DELETE CASCADE
定义外键约束。
我认为在常规词汇表中,表 E 是父表,表 A 是子表。你似乎在倒叙这一点。
您可以定义 5 种不同的操作,然后从父级 (documented here) 进行删除,但在从子级删除时均不适用。不存在这样的功能。