postgresql - Postgres:DELETE 挂在具有自引用外键的表上
问题描述
我正在尝试从具有自引用外键的表中删除行:
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 语句“UPDATE ONLY“public”。“items”SET“parent”=NULL WHERE $1 OPERATOR(pg_catalog.=)“parent””
如何从这样的表中删除行?
解决方案
根据这个答案,Postgres 中的外键被实现为触发器,因此您可以暂时禁用外键检查,如下所示:
ALTER TABLE items DISABLE TRIGGER ALL;
DELETE FROM items;
ALTER TABLE items ENABLE TRIGGER ALL;
推荐阅读
- swift - 在 Watchkit App Extension 中初次调用我的gestureclassifier.mlmodel 时出现以下运行时错误
- database - 在长文本字段上使用 PostgreSQL trigrams 进行慢速模糊搜索
- java - 为什么我的代码不能使用 Java JNA 将“@”和“~”等字符发送到另一个窗口?
- cmake - 如何使用 CMake 构建 libpng
- javascript - 如何使用 gatsby-image 从数组中查询多个图像?
- python - Visual Studio Code 中的 Python 应该这么慢吗?
- php - ACF get_field() 未在 WordPress 中返回值
- javascript - 转向转向导航
- node.js - 节点服务器挂起加载依赖图
- html - HTML内联中的CSS动画