更新时间: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

相关文档