Postgres:DELETE挂在带有自引用外键的表上

问题描述 投票:0回答:1

我正在尝试从具有自引用外键的表中删除行:

CREATE TABLE items (
    id        SERIAL  PRIMARY KEY,
    parent_id INTEGER      NOT NULL,
    FOREIGN KEY (parent_id) REFERENCES refers(id)
);

现在当我简单地做:

DELETE FROM items;

查询将永久冻结。如果我用Ctrl-C杀死它,它说

错误:由于用户请求而取消的声明 上下文:SQL语句“仅更新” public”。” items” SET“ parent” = NULL $ 1 OPERATOR(pg_catalog。=)“ parent”“

如何从这样的表中删除行?

postgresql foreign-keys freeze self-reference
1个回答
0
投票

根据this answer,Postgres中的外键被实现为触发器,因此您可以像这样暂时禁用外键检查:

© www.soinside.com 2019 - 2024. All rights reserved.