TRUNCATE

用于快速删除表内容的 SQL 命令

TRUNCATE 是一个 DML 命令,用于在没有 DELETE 操作的开销的情况下快速删除表的内容。

TRUNCATEPostgreSQL 7.0 中添加。

TRUNCATE 和锁定

DELETE 相比,TRUNCATE 在删除表内容之前需要对表进行 ACCESS EXCLUSIVE 锁。虽然 TRUNCATE 本身是一个非常快速的操作,但在活动数据库上,在获取锁之前可能会出现不可预测的延迟,并且 TRUNCATE 命令会显得“卡住”。

变更历史

示例

基本的 TRUNCATE 执行示例

postgres=# TRUNCATE TABLE foo;
TRUNCATE TABLE

尝试截断具有外键引用的表

postgres=# CREATE TABLE foo (id INT PRIMARY KEY);
CREATE TABLE

postgres=# CREATE TABLE bar (id INT, foo_id INT NOT NULL REFERENCES foo (id));
CREATE TABLE

postgres=# TRUNCATE TABLE foo;
ERROR:  cannot truncate a table referenced in a foreign key constraint
DETAIL:  Table "bar" references "foo".
HINT:  Truncate table "bar" at the same time, or use TRUNCATE ... CASCADE.

请注意,TRUNCATE TABLE foo 等同于 TRUNCATE TABLE foo RESTRICT。要递归地从引用表中截断数据,请使用 CASCADE

postgres=# TRUNCATE TABLE foo CASCADE;
NOTICE:  truncate cascades to table "bar"
TRUNCATE TABLE

也可以显式列出要截断的表

postgres=# TRUNCATE TABLE foo, bar;
TRUNCATE TABLE

分类

DML, SQL 命令

另请参阅

DELETE, DROP TABLE

反馈

在此提交有关“TRUNCATE”的任何评论、建议或更正 此处