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