HGDB批量创建list子分区

HGDB批量创建list子分区

1. 创建分区主表

highgo=# create table list(id int,logdate date) partition by list(logdate);
CREATE TABLE
highgo=# \d+ list
                          分区表 "public.list"
  栏位   |  类型   | 校对规则 | 可空的 | 预设 | 存储  | 统计目标 | 描述
---------+---------+----------+--------+------+-------+----------+------
 id      | integer |          |        |      | plain |          |
 logdate | date    |          |        |      | plain |          |
分区键值: LIST (logdate)
分区数: 0

2. 创建函数,用于批量创建list分区表

highgo=# create or replace function createtb(dt_start date)
highgo-# RETURNS void as $$
highgo$# DECLARE
highgo$#    stmt varchar;
highgo$#    dt_end date :=dt_start;
highgo$#    dt_current date := localtimestamp::DATE;
highgo$#    partnm varchar;
highgo$# BEGIN
highgo$#    while dt_end <= dt_current loop
highgo$#        partnm := 'tb_' || to_char(dt_end,'YYMMDD');
highgo$#        stmt := 'create table ' || partnm || ' partition of list for values in ('''||dt_end||''')';
highgo$#        IF NOT EXISTS(SELECT 1 FROM pg_catalog.pg_class WHERE relname = partnm) THEN
highgo$#           EXECUTE stmt;
highgo$#        END IF;
highgo$#        dt_end := dt_end + INTERVAL '1 months';
highgo$#  end loop;

highgo$#  end loop;
highgo$# end; $$  LANGUAGE plpgsql;
CREATE FUNCTION

3. 调用函数,并验证list分区子表已创建

highgo=# select createtb('20230101'::date);
 createtb
----------

(1 行记录)

highgo=# \d+ list
                          分区表 "public.list"
  栏位   |  类型   | 校对规则 | 可空的 | 预设 | 存储  | 统计目标 | 描述
---------+---------+----------+--------+------+-------+----------+------
 id      | integer |          |        |      | plain |          |
 logdate | date    |          |        |      | plain |          |
分区键值: LIST (logdate)
分区: tb_230101 FOR VALUES IN ('2023-01-01 00:00:00'),
      tb_230201 FOR VALUES IN ('2023-02-01 00:00:00'),
      tb_230301 FOR VALUES IN ('2023-03-01 00:00:00'),
      tb_230401 FOR VALUES IN ('2023-04-01 00:00:00'),
      tb_230501 FOR VALUES IN ('2023-05-01 00:00:00'),
      tb_230601 FOR VALUES IN ('2023-06-01 00:00:00'),
      tb_230701 FOR VALUES IN ('2023-07-01 00:00:00')

highgo=#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值