更新时间:2026-07-28 GMT+08:00
其他DDL
TRUNCATE
TRUNCATE表时会清除行存数据,同时级联处理加载的IMCV列存数据,不删除IMCV元信息。
TRUNCATE分区时会清除行存表分区数据,同时级联处理该分区的IMCV列存数据,不删除IMCV元信息。
示例:
gaussdb=# CREATE TABLE htap_test(
id int,
dept_id int,
salary int,
name varchar(20),
comments varchar(30)) with (storage_type = ustore);
CREATE TABLE
gaussdb=# INSERT INTO htap_test VALUES (generate_series(1,30), 1, 8000, 'Alice', 'for test');
INSERT 0 30
gaussdb=# ALTER TABLE htap_test COLVIEW;
ALTER TABLE
gaussdb=# SELECT count(*) FROM htap_test;
count
-------
30
(1 row)
gaussdb=# SELECT * FROM gs_imcv;
reloid | relname | dbname | username | parentoid | imcvispart | imcvnattr | imcvkey | priority | childoids | dboid | rootoid | schemaname
--------+-----------+--------+----------+-----------+------------+-----------+-----------+----------+-------------+-------+---------+------------
17822 | htap_test | test | *** | 0 | f | 5 | 1 2 3 4 5 | 1 | | 13360| 17822 | public
(1 row)
gaussdb=# TRUNCATE TABLE htap_test;
TRUNCATE TABLE
gaussdb=# SELECT count(*) FROM htap_test;
count
-------
0
(1 row)
--TRUNCATE不删除IMCV元信息,从系统表gs_imcv中仍能查询到记录。
gaussdb=# SELECT * FROM gs_imcv;
reloid | relname | dbname | username | parentoid | imcvispart | imcvnattr | imcvkey | priority | childoids | dboid | rootoid | schemaname
--------+-----------+--------+----------+-----------+------------+-----------+-----------+----------+-------------+-------+---------+------------
17822 | htap_test | test | *** | 0 | f | 5 | 1 2 3 4 5 | 1 | | 13360| 17822 | public
(1 row)
gaussdb=# DROP TABLE htap_test;
DROP TABLE DROP
DROP表时会删除行存表数据,同时级联删除该表的所有IMCV列存数据,以及对应的IMCV元信息。
DROP分区时会删除行存表的对应分区数据,同时级联删除该分区的IMCV列存数据,以及对应的IMCV元信息。
示例:
gaussdb=# CREATE TABLE htap_test(
id int,
dept_id int,
salary int,
name varchar(20),
comments varchar(30)) with (storage_type = ustore);
CREATE TABLE
gaussdb=# INSERT INTO htap_test VALUES (generate_series(1,30), 1, 8000, 'Alice', 'for test');
INSERT 0 30
gaussdb=# ALTER TABLE htap_test COLVIEW;
ALTER TABLE
gaussdb=# SELECT count(*) FROM htap_test;
count
-------
30
(1 row)
gaussdb=# SELECT * FROM gs_imcv;
reloid | relname | dbname | username | parentoid | imcvispart | imcvnattr | imcvkey | priority | childoids | dboid | rootoid | schemaname
--------+-----------+--------+----------+-----------+------------+-----------+-----------+----------+-------------+-------+---------+------------
17822 | htap_test | test | *** | 0 | f | 5 | 1 2 3 4 5 | 1 | | 13360| 17822 | public
(1 row)
gaussdb=# DROP TABLE htap_test;
DROP TABLE
gaussdb=# SELECT * FROM gs_imcv;
reloid | relname | dbname | username | parentoid | imcvispart | imcvnattr | imcvkey | priority | childoids | dboid | rootoid | schemaname
--------+-----------+--------+----------+-----------+------------+-----------+-----------+----------+-------------+-------+---------+------------
(0 row) VACUUM FULL
VACUUM FULL会在对行存表进行处理的同时级联处理列存数据。
对于HTAP列存数据的处理包含两个阶段:
- 删除原有的IMCV信息。
- 重建IMCV,通过重新加载实现IMCV列存数据内存紧凑。
示例:
gaussdb=# CREATE TABLE htap_test( id int, dept_id int, salary int, name varchar(20), comments varchar(30)) with (storage_type = ustore); CREATE TABLE gaussdb=# INSERT INTO htap_test VALUES (generate_series(1,30), 1, 8000, 'Alice', 'for test'); INSERT 0 30 gaussdb=# ALTER TABLE htap_test COLVIEW; ALTER TABLE gaussdb=# SELECT rel_name, imcvnattr, imcvkey, rowgroup_num, cu_num_in_mem, cu_mem_size FROM gs_htap_imcv_info(); rel_name | imcvnattr | imcvkey | rowgroup_num | cu_num_in_mem | cu_mem_size -----------+-----------+-----------+--------------+---------------+------------- htap_test | 5 | 1 2 3 4 5 | 1 | 6 | 8121 (1 row) gaussdb=# DELETE FROM htap_test WHERE id<10; DELETE 9 gaussdb=# VACUUM FULL htap_test; VACUUM gaussdb=# SELECT rel_name, imcvnattr, imcvkey, rowgroup_num, cu_num_in_mem, cu_mem_size FROM gs_htap_imcv_info(); rel_name | imcvnattr | imcvkey | rowgroup_num | cu_num_in_mem | cu_mem_size -----------+-----------+-----------+--------------+---------------+------------- htap_test | 5 | 1 2 3 4 5 | 1 | 6 | 8103 (1 row) gaussdb=# DROP TABLE htap_test; DROP TABLE
父主题: DDL