postgresql - Postgresql 用外键约束截断表
问题描述
目前我正在尝试截断在 Postgresql 11.3 上有外键约束的表。
我试着这样做
BEGIN;
SET CONSTRAINTS ALL DEFERRED;
TRUNCATE tableA;
COMMIT;
但收到错误
ERROR: cannot truncate a table referenced in a foreign key constraint
DETAIL: Table "xxx" references "tableA".
HINT: Truncate table "xxx" at the same time, or use TRUNCATE ... CASCADE.
不会SET CONSTRAINTS ALL DEFERRED
关闭外键约束检查吗?有没有在不触发外键约束检查且不涉及 CASCADE 的情况下截断表?
解决方案
从一个表中删除所有数据
最简单的 TRUNCATE TABLE
语句形式如下:
TRUNCATE TABLE table_name;
从具有外键引用的表中删除所有数据
要从主表和所有对主表有外键引用的表中删除数据,请使用CASCADE
如下选项:
TRUNCATE TABLE table_name CASCADE;
更新:
BEGIN;
ALTER TABLE table_name DISABLE TRIGGER ALL;
TRUNCATE TABLE table_name;
ALTER TABLE table_name ENABLE TRIGGER ALL;
COMMIT;
推荐阅读
- azure-functions - 无法限制对 Azure 函数应用的调用
- python - 在python中重复链接
- javascript - 只为每个手风琴选择第一层的外部元素
- flutter - Flutter 反序列化使用泛型错误
- javascript - [WebdriverIO][Typescript] 是否可以从浏览器窗口获取自定义变量?
- sql - Django ORM 原始查询如何管理报价
- sql - 类似于 Excel 功能的动态转置 SQL 表的方法
- php - 按一列分组并对 Laravel 集合中的另一列求和
- asp.net-core - 如何将 Kendo DropDownList 绑定到嵌套对象
- python - 如何从列表中删除双 []?