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表示具体的分区

 

posted @ 2024-12-13 15:30  云翊宸  阅读(18)  评论(0编辑  收藏  举报