首页 > 解决方案 > 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 的情况下截断表?

标签: postgresql

解决方案


从一个表中删除所有数据

最简单的 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;

推荐阅读