Postgres 数据库删除父 table 行不删除子 table 行数据?
Postgres db deleting parent table row NOT deleting child table row data?
我有一个不是我设计的 postgres 数据库,但我有一些 table 具有引用其他 table 的主键 (PK) 的外键 (FK)秒。我画了一个漂亮的小图来展示这个:
所以你可以看到我有 (3) 个模式,它们会有正常的名称,但为了制作这个示例 dumbed-down/simple,我刚刚将它们命名为 schema1 、schema2 和 schema3。现在,例如 table A 有 (3) 个外键,它们引用 table B, tableD,直接tableE.
我对 research/googling 的预期行为是,如果您删除父 table(table 具有子 table 中的外键引用的主键),那么应该自动删除子 table 行。
我没有看到这种行为 - 也就是说,如果我从 table A 中删除一条记录,它引用了 (3) 其他三个 table s (table B, table D, and table E), table A 中的记录被删除,但其他 tables 中的所有记录保留.
我希望能够以最简单的方式删除记录,并让引用的所有其他 table 也自动删除。我怎样才能做到这一点?
不会自动删除相关行;如果删除行会使数据库不一致,则默认操作是抛出错误。
如果要删除依赖行,必须使用ON DELETE CASCADE
定义外键约束。
我觉得在约定俗成的词汇里,tableE是父,tableA是子。您似乎在向后描述。
您可以定义 5 种不同的操作,然后从父项 (documented here) 中删除,但是 none 在从子项中删除时适用。不存在此类功能。
我有一个不是我设计的 postgres 数据库,但我有一些 table 具有引用其他 table 的主键 (PK) 的外键 (FK)秒。我画了一个漂亮的小图来展示这个:
所以你可以看到我有 (3) 个模式,它们会有正常的名称,但为了制作这个示例 dumbed-down/simple,我刚刚将它们命名为 schema1 、schema2 和 schema3。现在,例如 table A 有 (3) 个外键,它们引用 table B, tableD,直接tableE.
我对 research/googling 的预期行为是,如果您删除父 table(table 具有子 table 中的外键引用的主键),那么应该自动删除子 table 行。
我没有看到这种行为 - 也就是说,如果我从 table A 中删除一条记录,它引用了 (3) 其他三个 table s (table B, table D, and table E), table A 中的记录被删除,但其他 tables 中的所有记录保留.
我希望能够以最简单的方式删除记录,并让引用的所有其他 table 也自动删除。我怎样才能做到这一点?
不会自动删除相关行;如果删除行会使数据库不一致,则默认操作是抛出错误。
如果要删除依赖行,必须使用ON DELETE CASCADE
定义外键约束。
我觉得在约定俗成的词汇里,tableE是父,tableA是子。您似乎在向后描述。
您可以定义 5 种不同的操作,然后从父项 (documented here) 中删除,但是 none 在从子项中删除时适用。不存在此类功能。