guassdb华为OpenGauss高斯数据库间隔分区表自动创建分区sql实例
命令行操作流程
# 切换用户 su - omm # 连接数据库 gsql -d postgres -p 6432 -r # 选择数据库 \c env_demo # 设置查询模式 SET SEARCH_PATH TO public;
sql模板
1、预创建时间范围sql分区(非数据库自动创建分区)
CREATE TABLE t_metadata ( id VARCHAR ( 36 ) NOT NULL PRIMARY KEY, stationcode VARCHAR ( 50 ) NOT NULL, instrumentcode VARCHAR ( 50 ) NOT NULL, frequencyid VARCHAR ( 10 ) NOT NULL, datatime TIMESTAMP ( 6 ) NOT NULL, meta TEXT NOT NULL, uploadtime TIMESTAMP ( 6 ) NOT NULL, mark VARCHAR ( 1 ) NOT NULL ) PARTITION BY RANGE ( datatime ) ( PARTITION t_metadata_part START ( '2024-10-01' ) END ( '2040-10-01' ) EVERY ( '1 month' ) );
这种方式创建的分区表是首先指定开始和结束时间范围,然后通过EVERY关键字在这个范围内的每一个月创建一个分区,预先创建出一定数量的分区
2、数据库自动创建分区
CREATE TABLE t_metadata_bak ( id VARCHAR ( 36 ) NOT NULL PRIMARY KEY, stationcode VARCHAR ( 50 ) NOT NULL, instrumentcode VARCHAR ( 50 ) NOT NULL, frequencyid VARCHAR ( 10 ) NOT NULL, datatime TIMESTAMP ( 6 ) NOT NULL, meta TEXT NOT NULL, uploadtime TIMESTAMP ( 6 ) NOT NULL, mark VARCHAR ( 1 ) NOT NULL ) PARTITION BY RANGE ( datatime ) INTERVAL ( '1 month' ) ( PARTITION t_metadata_part START ( '2024-10-01' ) );
这种方式是首先指定分区的开始时间,然后在插入数据时会根据数据的时间,按照一个月的间隔数据库自动创建分区
下面是查看分区信息的sql语句
-- 先执行下面的sql查出oid SELECT oid, relname, parttype FRom pg_class WHERE relname = 't_metadata'; oid | relname | parttype -------+------------+---------- 21327 | t_metadata | p (1 row) -- 通过 oid 可以查到分区 SELECT oid, relname, parttype, parentid FRoM pg_partition WHERE parentid = 21327; oid | relname | parttype | parentid -------+---------------------+----------+---------- 21331 | t_metadata_part_0 | p | 21327 21332 | t_metadata_part_1 | p | 21327 21330 | t_metadata | r | 21327 21333 | t_metadata_part_2 | p | 21327 21334 | t_metadata_part_3 | p | 21327 21335 | t_metadata_part_4 | p | 21327
其中parttype为r表示分区表的主表,p表示具体的分区