更新时间:2026-07-28 GMT+08:00
二级分区表自动扩展
创建二级分区表时,可以在创建范围分区定义上指定INTERVAL子句,实现支持二级分区表的一级自动扩展以及二级自动扩展。
二级分区表的范围分区自动扩展行为受INTERVAL子句的指定位置影响:
- 若在一级分区后指定了INTERVAL子句,则仅支持一级分区自动扩展,不支持二级分区的自动扩展,且不能定义存在一级分区键值为MAXVALUE的分区。
- 若在二级分区后指定了INTERVAL子句,则仅支持二级分区自动扩展,不支持一级分区的自动扩展,且不能定义存在二级分区键值为MAXVALUE的分区。
- 若在一级分区和二级分区后同时指定了INTERVAL子句,则同时支持一级分区和二级分区自动扩展,一级分区键值和二级分区键值均不能定义含有MAXVALUE分区。
- 创建二级分区表时,在创建一级分区定义上指定INTERVAL子句,实现支持一级自动扩展。
gaussdb=# CREATE TABLE interval_range (c1 int, c2 int) PARTITION BY RANGE (c1) INTERVAL(5) SUBPARTITION BY RANGE (c2) ( PARTITION p1 VALUES LESS THAN (5) ( SUBPARTITION sp11 VALUES LESS THAN (5), SUBPARTITION sp12 VALUES LESS THAN (10) ), PARTITION p2 VALUES LESS THAN (10) ( SUBPARTITION sp21 VALUES LESS THAN (5), SUBPARTITION sp22 VALUES LESS THAN (10) ) );当插入数据无法匹配到已有的任意一级分区时,会自动创建一个新的一级分区,并在一级分区下会定义一个全新的二级分区。-- 一级分区键插入数据12超过现有的一级分区p1、p2的范围,所以自动创建一个新的一级分区sys_p1,分区范围为[10, 15)。 gaussdb=# INSERT INTO interval_range VALUES (12, 0); -- 清理示例。 gaussdb=# DROP TABLE interval_range;
- 创建二级分区表时,在二级分区定义上指定INTERVAL子句,实现支持二级自动扩展。
gaussdb=# CREATE TABLE list_interval (c1 int, c2 int) PARTITION BY LIST (c1) SUBPARTITION BY RANGE (c2) INTERVAL(5) ( PARTITION p1 VALUES (1, 2, 3)( SUBPARTITION sp11 VALUES LESS THAN (5), SUBPARTITION sp12 VALUES LESS THAN (10) ), PARTITION p2 VALUES (4, 5, 6)( SUBPARTITION sp21 VALUES LESS THAN (5), SUBPARTITION sp22 VALUES LESS THAN (10) ) );当插入数据无法匹配到已有的二级分区时,会在对应的一级分区下自动创建一个全新的二级分区。
-- 一级分区键插入数据4匹配到p2分区,二级分区键插入数据20超出现有的一级分区p2下的二级分区的范围,所以自动创建一个新的二级分区p2_sys_sp1,分区范围为[20, 25)。 gaussdb=# INSERT INTO list_interval VALUES (4, 21); -- 清理示例。 gaussdb=# DROP TABLE list_interval;
- 创建二级分区表时,在一级/二级分区定义上同时指定INTERVAL子句,表示支持一级自动扩展/二级自动扩展。
gaussdb=# CREATE TABLE interval_interval (c1 int, c2 int) PARTITION BY RANGE (c1) INTERVAL(100) SUBPARTITION BY RANGE (c2) INTERVAL(5) ( PARTITION p1 VALUES LESS THAN (100) ( SUBPARTITION sp11 VALUES LESS THAN (5), SUBPARTITION sp12 VALUES LESS THAN (10) ), PARTITION p2 VALUES LESS THAN (200) ( SUBPARTITION sp21 VALUES LESS THAN (5), SUBPARTITION sp22 VALUES LESS THAN (10) ) );- 当插入数据无法匹配到已有的任意一级分区时,会自动创建一个新的一级分区,并在一级分区下会定义一个全新的二级分区。
-- 一级分区键插入数据230超出现有的一级分区p1、p2的范围,所以自动创建一个新的一级分区sys_p1,分区范围为[200, 300);同时二级分区键插入数据20也会在新的一级分区sys_p1定义一个新的二级分区sys_p1_sys_sp1,分区范围为[20, 25)。 gaussdb=# INSERT INTO interval_interval VALUES (230, 20);
- 当插入数据无法匹配到已有的任意二级分区时,会在对应的一级分区下自动创建一个新的二级分区。
-- 二级分区键插入数据30超出现有的二级分区的范围,所以自动创建二级分区sys_p1_sys_sp2,分区范围为[30, 35)。 gaussdb=# INSERT INTO interval_interval VALUES (230, 30);
清理示例。gaussdb=# DROP TABLE interval_interval;
- 当插入数据无法匹配到已有的任意一级分区时,会自动创建一个新的一级分区,并在一级分区下会定义一个全新的二级分区。
父主题: 范围分区自动扩展