PostgreSQL TRUNCATE TABLE 清空表
在本文中,我们介绍了在 PostgreSQL 服务器上如何使用 TRUNCATE TABLE
语句清空一个或多个表。
当我们需要清空一个表中的所有行时,除了使用 DELETE * FROM table
还可以使用 TRUNCATE TABLE
语句。
TRUNCATE
语句和不带任何条件的 DELETE
语句的效果相同。但是 TRUNCATE
速度更快,因为它不扫描表。并且,TRUNCATE
会立即回收磁盘空间。 TRUNCATE
在清空大表时很有用。
PostgreSQL TRUNCATE
语法
要清空一个或者多个表中的所有的行,请按照以下语法使用使用 TRUNCATE
语句:
TRUNCATE [TABLE] [ONLY] table_name [ * ] [, ... ]
[RESTART IDENTITY | CONTINUE IDENTITY] [ CASCADE | RESTRICT ]
解释说明:
TABLE
关键字是可选的。ONLY
关键字是可选的。如果在表名前指定了ONLY
,则只清空此表,不包含它的子表。否则,此表和它的子表都将被清空。table_name
是要清空的表的名字。 表名后的*
明确的指示子表也将被清空。- 您可以在一个
TRUNCATE
语句中清空多个表。 多个表名使用逗号分隔。 RESTART IDENTITY
选项指示自动重置表中的列拥有的序列。CONTINUE IDENTITY
选项指示不改变表中的序列的值,它是默认的。CASCADE
选项指示同时清空那些通过外键引用table_name
的表。RESTRICT
选项指示如果有外键引用要清空的表,则拒绝操作。
PostgreSQL TRUNCATE
实例
我们通过以下实例比较 TRUNCATE
和 DELETE
在清空一个表的效率。
首先,我们使用下面的语句创建一个 test_truncate
表用于测试:
CREATE TABLE test_truncate (
v INTEGER
);
然后,使用下面的 sql 语句插入 1000 万条数据:
INSERT INTO test_truncate (v)
SELECT generate_series(1, 10000000) v;
为了观察查询语句消耗的时间,请先使用下面的命令打开计时:
\timing
通过以下 DELETE
语句删除表中的所有行:
DELETE FROM test_truncate;
DELETE 10000000
Time: 6566.458 ms (00:06.566)
上面是 DELETE
语句的返回结果。它显示了从表中删除 10000000 行,总共耗费 6566.458 毫秒。
再使用上面的 INSERT
语句重新插入 1000 万行后,通过以下 TRUNCATE TABLE
语句清空表:
TRUNCATE TABLE test_truncate;
TRUNCATE TABLE
Time: 31.785 ms
上面是 TRUNCATE TABLE
语句的返回结果。它显示了清空此表共耗费 31.785 毫秒。所以 TRUNCATE
比 DELETE
快的多。
结论
在本文中,我们介绍了在 PostgreSQL 中如何使用 TRUNCATE TABLE
语句清空表。 TRUNCATE TABLE
比 DELETE
速度快的多,它对于清空一个大表很有用。