二级分区表自动扩展
创建二级分区表时,可以在创建列表分区定义上指定AUTOMATIC关键字,以支持二级分区表的一级自动扩展/二级自动扩展。
- 创建二级分区表时,在创建一级分区定义上指定AUTOMATIC,以支持一级自动扩展。
gaussdb=# CREATE TABLE autolist_range (c1 int, c2 int) PARTITION BY LIST (c1) AUTOMATIC SUBPARTITION BY RANGE (c2) ( 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) ) );
当插入数据无法匹配到已有的任意一级分区时,会自动创建一个新的一级分区,新一级分区的范围定义为单key(新数据对应的新分区键值),其下面会定义一个全集的二级分区。--一级分区键插入数据9,因为现有的一级分区p1、p2的键值中不包含9,所以自动创建一个新的一级分区sys_p1,分区定义为VALUES (9) gaussdb=# INSERT INTO autolist_range VALUES (9, 0);
这一功能与如下命令等价:
gaussdb=# ALTER TABLE autolist_range ADD PARTITION sys_p1 VALUES (9); gaussdb=# INSERT INTO autolist_range VALUES (9, 0); gaussdb=# DROP TABLE autolist_range;
- 创建二级分区表时,在二级分区定义上指定AUTOMATIC,以支持二级自动扩展。
gaussdb=# CREATE TABLE range_autolist (c1 int, c2 int) PARTITION BY RANGE (c1) SUBPARTITION BY LIST (c2) AUTOMATIC ( PARTITION p1 VALUES LESS THAN (5) ( SUBPARTITION sp11 VALUES (1, 2, 3), SUBPARTITION sp12 VALUES (4, 5, 6) ), PARTITION p2 VALUES LESS THAN (10) ( SUBPARTITION sp21 VALUES (1, 2, 3), SUBPARTITION sp22 VALUES (4, 5, 6) ) );
当插入数据无法匹配到已有的任意二级分区时,会在对应的一级分区下自动创建一个新的二级分区,新二级分区的范围定义为单key(新数据对应的新分区键值)。
--二级分区键插入数据0,因为现有的二级分区的键值中不包含0,所以自动创建一个新的二级分区sys_sp1,分区定义为VALUES (0) gaussdb=# INSERT INTO range_autolist VALUES (4, 0);
这一功能与如下命令等价:
gaussdb=# ALTER TABLE range_autolist MODIFY PARTITION p1 ADD SUBPARTITION sys_sp1 VALUES (0); gaussdb=# INSERT INTO range_autolist VALUES (4, 0); -- 清理示例 gaussdb=# DROP TABLE range_autolist;
- 创建二级分区表时,在一级/二级分区定义上同时指定AUTOMATIC,表示支持一级自动扩展/二级自动扩展。
gaussdb=# CREATE TABLE autolist_autolist (c1 int, c2 int) PARTITION BY LIST (c1) AUTOMATIC SUBPARTITION BY LIST (c2) AUTOMATIC ( PARTITION p1 VALUES (1, 2, 3) ( SUBPARTITION sp11 VALUES (1, 2, 3), SUBPARTITION sp12 VALUES (4, 5, 6) ), PARTITION p2 VALUES (4, 5, 6) ( SUBPARTITION sp21 VALUES (1, 2, 3), SUBPARTITION sp22 VALUES (4, 5, 6) ) );
- 当插入数据无法匹配到已有的任意一级分区时,会自动创建一个新的一级分区,新一级分区的范围定义为单key(新数据对应的新分区键值),其下面会定义一个范围定义为单key的二级分区。
--一级分区键插入数据9,因为现有的一级分区p1、p2的键值中不包含9,所以自动创建一个新的一级分区sys_p1,分区定义为VALUES (9);同时二级分区键插入数据0,因为现有的二级分区的键值中不包含0,所以会在新的一级分区sys_p1定义一个新的二级分区sys_sp1,分区定义为VALUES (0)。 gaussdb=# INSERT INTO autolist_autolist VALUES (9, 0);
这一功能与如下命令等价:
gaussdb=# ALTER TABLE autolist_autolist ADD PARTITION sys_p1 VALUES (9) (SUBPARTITION sys_sp1 VALUES (0)); gaussdb=# INSERT INTO autolist_autolist VALUES (9, 0);
- 当插入数据无法匹配到已有的任意二级分区时,会在对应的一级分区下自动创建一个新的二级分区,新二级分区的范围定义为单key(新数据对应的新分区键值)。
--二级分区键插入数据0,因为现有的二级分区的键值中不包含0,所以自动创建二级分区sys_sp2,分区定义为VALUES (0) gaussdb=# INSERT INTO autolist_autolist VALUES (4, 0);
这一功能与如下命令等价:
gaussdb=# ALTER TABLE autolist_autolist MODIFY PARTITION p2 ADD SUBPARTITION sys_sp2 VALUES (0); gaussdb=# INSERT INTO autolist_autolist VALUES (4, 0); -- 清理示例 gaussdb=# DROP TABLE autolist_autolist;
- 当插入数据无法匹配到已有的任意一级分区时,会自动创建一个新的一级分区,新一级分区的范围定义为单key(新数据对应的新分区键值),其下面会定义一个范围定义为单key的二级分区。
二级分区表的列表分区自动扩展行为受AUTOMATIC关键字的指定位置影响:
- 若在一级分区后指定了AUTOMATIC关键字,则仅支持一级分区自动扩展,不支持二级分区的自动扩展,且不能定义有一级分区键值为DEFAULT分区。
- 若在二级分区后指定了AUTOMATIC关键字,则仅支持二级分区自动扩展,不支持一级分区的自动扩展,且不能定义有二级分区键值为DEFAULT分区。
- 若在一级分区和二级分区后同时指定了AUTOMATIC关键字,则同时支持一级分区和二级分区自动扩展,一级分区键值和二级分区键值均不能定义有DEFAULT分区。