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 fooTRUNCATE TABLE foo RESTRICT 相同。要从引用表递归截断数据,请使用 CASCADE

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

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

postgres=# TRUNCATE TABLE foo, bar;
TRUNCATE TABLE

分类

DMLSQL 命令

另请参阅

DELETEDROP TABLE

反馈

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