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;
我正在尝试从具有自引用外键的 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 中删除行?
根据
ALTER TABLE items DISABLE TRIGGER ALL;
DELETE FROM items;
ALTER TABLE items ENABLE TRIGGER ALL;