TRUNCATE
删除表中的所有行,而不执行表扫描:此操作是非限定的 DELETE 操作的替代方法,其速度更快。要运行 TRUNCATE 命令,您必须是表的所有者或超级用户。
TRUNCATE 的效率要比 DELETE 高很多,不需要 VACUUM 和 ANALYZE。不过请注意,TRUNCATE 在其运行的事务中提交事务。
语法
TRUNCATE [ TABLE ] table_name
参数
- TABLE
-
可选关键字。
- table_name
-
一个临时或永久表。只有表所有者或超级用户可以截断表。
您可以截断任何表,包括在外键约束中引用的表。
在截断表后,无需对表执行 vacuum 操作。
使用说明
TRUNCATE 命令提交运行该命令的事务;因此,您无法回滚 TRUNCATE 操作,TRUNCATE 命令可能在提交自身时提交其他操作。
示例
使用 TRUNCATE 命令可以删除 CATEGORY 表中的所有行:
truncate category;
尝试回滚 TRUNCATE 操作:
begin; truncate date; rollback; select count(*) from date; count ------- 0 (1 row)
DATE 表在 ROLLBACK 命令后保留为空,因为已自动提交 TRUNCATE 命令。