更新时间:2026-07-28 GMT+08:00
二级分区模板
二级分区模板是一组自定义的二级分区定义,在二级分区表下创建一级分区且未声明二级分区定义时,会使用二级分区模板进行自动创建二级分区。
- 基于模板创建的二级分区,二级分区名由一级分区名拼接模板对象名组成,当已存在重名的分区名时,基于模板创建二级分区时会执行报错。
- 模板的分区定义继承分区表的分区创建相关约束,即分区名互不重复,分区范围满足二级分区键约束。
- 二级分区自动扩展与模板定义互斥,即当二级分区定义为AUTOMATIC LIST或INTERVAL时,不能创建分区模板;存在分区模板时,不能将二级分区定义改为AUTOMATIC LIST或INTERVAL。
- 由于M-Compatibility模式数据库不支持自增分区相关语法,且仅支持*-hash二级分区,基于模板创建二级分区仅在非M-Compatibility模式数据库下支持。
示例
- 创建二级分区表,声明二级分区模板定义,且在一级分区中未对二级分区定义进行声明,则使用模板在一级分区下自动创建二级分区。
gaussdb=# CREATE TABLE t1 ( c1 INT, c2 INT ) PARTITION BY LIST(c1) SUBPARTITION BY LIST(c2) SUBPARTITION TEMPLATE ( SUBPARTITION sys_sp1 VALUES(1), SUBPARTITION sys_sp2 VALUES(2), SUBPARTITION sys_sp3 VALUES(3) ) ( PARTITION p1 VALUES (1) ( SUBPARTITION sp1 VALUES(1) ), PARTITION p2 VALUES (2) );以上示例代码与如下命令实现功能等价:
gaussdb=# CREATE TABLE t1 ( c1 INT, c2 INT ) PARTITION BY LIST(c1) SUBPARTITION BY LIST(c2) ( PARTITION p1 VALUES (1) ( SUBPARTITION sp1 VALUES(1) ), PARTITION p2 VALUES (2) ( SUBPARTITION p2_sys_sp1 VALUES(1), SUBPARTITION p2_sys_sp2 VALUES(2), SUBPARTITION p2_sys_sp3 VALUES(3) ) ); - 手动新增一级分区,并且未对二级分区定义进行定义,会基于模板创建二级分区。
gaussdb=# ALTER TABLE t1 ADD PARTITION p3 VALUES(3);
以上示例代码与如下命令实现功能等价:
gaussdb=# ALTER TABLE t1 ADD PARTITION p3 VALUES(3) (SUBPARTITION p3_sys_sp1 VALUES(1), SUBPARTITION p3_sys_sp2 VALUES(2), SUBPARTITION p3_sys_sp3 VALUES(3));
- 非透明多写特性下,如果一级分区策略是INTERVAL,插入数据导致自动新增一级分区时,存在二级分区模板会使用模板创建二级分区。
gaussdb=# ALTER TABLE t1 SET PARTITIONING INTERVAL(10); gaussdb=# INSERT INTO t1 VALUES(35,1);
以上示例代码与如下命令实现功能等价:
gaussdb=# ALTER TABLE t1 ADD PARTITION sys_p1 VALUES LESS THAN (40) (SUBPARTITION sys_p1_sys_sp1 VALUES(1), SUBPARTITION sys_p1_sys_sp2 VALUES(2), SUBPARTITION sys_p1_sys_sp3 VALUES(3)); gaussdb=# INSERT INTO t1 VALUES(35,1);
- 指定一个不存在的一级分区创建分类索引,会新建一个一级分区,存在二级分区模板会使用模板创建二级分区。
--自动新建一个一级分区sys_p2,范围为[30,40),其下定义的二级分区为(SUBPARTITION sys_p2_sys_sp1 VALUES(1), SUBPARTITION sys_p2_sys_sp2 VALUES(2))。 gaussdb=# CREATE INDEX t1_idx1 ON t1(c1) LOCAL (PARTITION p1_idx1 for (32));
- 二级分区模板支持新增、修改和删除。
--新增、修改二级分区模板。 gaussdb=# ALTER TABLE t1 SET SUBPARTITION TEMPLATE (SUBPARTITION sys_p1 VALUES(1), SUBPARTITION sys_p2 VALUES(2)); --删除二级分区模板。 gaussdb=# ALTER TABLE t1 SET SUBPARTITION TEMPLATE (); -- 清理示例。 gaussdb=# DROP TABLE t1;
父主题: 分区自动扩展