我正在尝试从具有自引用外键的表中删除行:
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”“
如何从这样的表中删除行?
根据this answer,Postgres中的外键被实现为触发器,因此您可以像这样暂时禁用外键检查: