更新时间:2024-06-07 GMT+08:00

二级分区表自动扩展

创建二级分区表时,可以在创建列表分区定义上指定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;

二级分区表的列表分区自动扩展行为受AUTOMATIC关键字的指定位置影响:

  • 若在一级分区后指定了AUTOMATIC关键字,则仅支持一级分区自动扩展,不支持二级分区的自动扩展,且不能定义有一级分区键值为DEFAULT分区。
  • 若在二级分区后指定了AUTOMATIC关键字,则仅支持二级分区自动扩展,不支持一级分区的自动扩展,且不能定义有二级分区键值为DEFAULT分区。
  • 若在一级分区和二级分区后同时指定了AUTOMATIC关键字,则同时支持一级分区和二级分区自动扩展,一级分区键值和二级分区键值均不能定义有DEFAULT分区。