VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

支持DEFAULT分区

功能描述

针对Range和List分区,支持定义和使用default分区。创建分区表的时候可以指定创建default分区,对于已经创建的分区表,可以新增和删除default分区。

Range类型的分区表,可以通过指定分区范围值为MAXVALUE来包含所有情况的值。

注意事项

  • 已存在default分区的LIST分区不能新增分区。
  • 删除分区时不能只剩下一个default分区。
  • 在创建分区表时,不能只定义一个default分区,并且default分区必须定义在最后。
  • 已经存在default分区的分区表,不能新增分区。
  • 删除分区时,不能只剩下一个default分区。
  • default分区不能进行SPLIT和MERGE操作。

语法格式

  • List分区表创建分区表时指定创建default分区,default分区必须定义为最后一个分区,SQL语法如下:

    CREATE TABLE [IF NOT EXISTS]table_name
    ......
    PARTITION BY [LIST ]({column_name|(expression)})
    (
    PARTITION partition_name...,
    PARTITION partition_name VALUES(DEFAULT)[TABLESPACE tablespace_name]
    )
    
  • List分区表新增default分区的SQL语法如下:

    ALTER TABLE table_name ADD PARTITION partition_name VALUES(DEFAULT)
    [TABLESPACE tablespace_name];
    
  • List分区表删除default分区SQL语法如下:

    ALTER TABLE partition_name DROP PARTITION partition_name;
    
  • Range分区表创建分区表时指定创建default分区,SQL语法如下:

    CREATE TABLE [IF NOT EXISTS]table_name
    ......
    PARTITION BY [RANGE ]({column_name|(expression)})
    (
    PARTITION partition_name...,
    PARTITION partition_name VALUES LESS THAN (MAXVALUE) [TABLESPACE tablespace_name]
    )
    
  • Range分区新增default分区的SQL语法如下:

    ALTER TABLE table_name ADD PARTITION partition_name VALUES LESS THAN (MAXVALUE)
    [TABLESPACE tablespace_name];
    
  • Range分区表删除default分区SQL语法如下:

    ALTER TABLE partition_name DROP PARTITION partition_name;
    

示例

1、创建一个分区表。

create table t_partition_list4(col number,name varchar2(20))
partition by list(col)(
partition t_list_p1 values(1,3,5,7,9) ,
partition t_list_p2 values(2,4,6,8,10) );

2、添加一个默认分区并插入数据。

alter table t_partition_list4 add partition t_list_default values(default);
insert into t_partition_list4 values(1,'t_list_p1');
insert into t_partition_list4 values(2,'t_list_p2');
insert into t_partition_list4 values(31,'t_list_default');

3、查询分区表中的数据。

  • 查询分区t_list_p1的数据。

    select * from t_partition_list4 partition(t_list_p1);
    

    返回结果为:

    col |   name
    -----+-----------
    1 | t_list_p1
    (1 row)
    
  • 查询分区t_list_p2的数据。

    select * from t_partition_list4 partition(t_list_p2);
    

    返回结果为:

    col |   name
    -----+-----------
    2 | t_list_p2
    (1 row)
    
  • 查询分区t_list_default的数据。

    select * from t_partition_list4 partition(t_list_default);
    

    返回结果为:

    col |      name
    -----+----------------
    31 | t_list_default
    (1 row)