Postgres表分区

通过触发器与函数建立分区

CREATE OR REPLACE FUNCTION create_table_partition () RETURNS TRIGGER AS $BODY$
DECLARE
    date_time TEXT;
    insert_sql TEXT;
    create_sql TEXT;
BEGIN
	-- NEW为新加入的record,可以由其索引各个字段
    SELECT to_char( NEW.operation_time, 'YYYY_MM' ) INTO date_time;
    insert_sql := 'insert into Test.test1_' || date_time || ' VALUES ($1.*)' ;
    EXECUTE insert_sql USING NEW;
    RETURN NULL;
    -- 当无对应分区表时,捕捉到如下异常,将会新建table
    EXCEPTION
    WHEN UNDEFINED_TABLE THEN
    -- inherits 集成之前表格所有的内容
    create_sql := 'create table if not exists Test.test1_' || date_time || '() inherits (Test.test1)';
    EXECUTE create_sql;

    EXECUTE insert_sql USING NEW;
    RETURN NULL;
END;
$BODY$
LANGUAGE'plpgsql';

-- 触发器,每次新增字段时会触发该函数新增分区
CREATE TRIGGER create_table_partition_trigger BEFORE INSERT ON Test.test1 FOR EACH ROW EXECUTE PROCEDURE create_table_partition ();

修改table(比如新增字段)后分区表随着新增字段

如下新增字段:

ALTER TABLE Test.test1 ADD COLUMN "user_append" varchar(255);
COMMENT ON COLUMN "Test"."test1"."user_append" IS '用户新增角色';

所有的分区表都会新增字段。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值