Postgres db 删除父表行而不是删除子表行数据?

问题描述

我有一个不是我设计的 postgres 数据库,但我有一些表的外键 (FK) 引用了其他一些表的主键 (PK)。我画了一个漂亮的小图表来展示这一点:

enter image description here

所以你可以看到我有 (3) 三个模式,它们会有正常的名称,但为了使这个例子变得简单/简单,我刚刚将它们称为 schema1schema2 schema3。现在,以表A为例,有(3)个外键,分别引用表B表D表E 直接。

我从研究/谷歌搜索中期望的行为是,如果您删除父表(具有子表中的外键引用的主键的表),则子表行删除自动执行。

我没有看到这种行为 - 也就是说,如果我从 表 A删除一条记录,该记录引用 (3) 其他三个表(表 B、表 D 和表 E),则表 A 中的记录被删除,但其他表中的所有记录都保留。

我希望能够以最简单的方式删除记录,并让所有其他引用的表也自动删除。我怎样才能做到这一点?

解决方法

相关行不会被自动删除;如果删除一行会使数据库不一致,则默认操作是抛出错误。

如果要删除依赖行,则必须使用 ON DELETE CASCADE 定义外键约束。

,

我认为在常规词汇表中,表 E 是父表,表 A 是子表。你似乎在倒叙这一点。

您可以定义 5 种不同的操作,然后从父级 (documented here) 进行删除,但在从子级删除时均不适用。不存在这样的功能。