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

Postgres: DELETE hangs on a table with a self-referential foreign key

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

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

现在当我做的时候:

DELETE FROM items;

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

ERROR: canceling statement due to user request CONTEXT: SQL statement "UPDATE ONLY "public"."items" SET "parent" = NULL WHERE OPERATOR(pg_catalog.=) "parent""

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

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

ALTER TABLE items DISABLE TRIGGER ALL; 
DELETE FROM items; 
ALTER TABLE items ENABLE TRIGGER ALL;