TRUNCATE

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

TRUNCATE 是一个DML命令,用于快速删除表的内容,而无需DELETE]操作的开销。

TRUNCATE是在PostgreSQL 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"的评论、建议或更正 此处