TRUNCATE - Amazon Redshift

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;

此命令会删除实体化视图中的所有记录,并保持实体化视图及其架构不变。在查询中,实体化视图名称是一个示例。