首页 > 其他 > 详细

postgres 按日分表

时间:2020-04-10 14:48:48      阅读:75      评论:0      收藏:0      [点我收藏+]
 CREATE OR REPLACE FUNCTION auto_insert_into_tbl_partition()
  RETURNS trigger AS
$BODY$
DECLARE
    time_column_name     text ;        -- 时间字段,用时间判断日期以此分表,属于必填的
    curMMDD         varchar(16);    -- ‘YYYYMMDD‘格式的字串,用做分区子表的后缀
    isExist         boolean;        -- 判断分区子表是否已存在
    strSQL          text;
    
BEGIN
    -- 从调用参数中获取time_column_name
    time_column_name := TG_ARGV[0];
   
    -- 判断对应分区表是否已经存在
    EXECUTE SELECT $1.||time_column_name INTO strSQL USING NEW;
    curMMDD := to_char(strSQL::timestamp,YYYYMMDD);
    select count(1) INTO isExist from pg_class where relname = (t_audit_||curMMDD);
 
    -- 若不存在先创建子分区再插入
    IF (isExist = false) THEN  
        -- 创建子分区表继承父表
        strSQL := CREATE TABLE IF NOT EXISTS t_audit_||curMMDD||() INHERITS (t_audit);;  
        EXECUTE strSQL;
        -- 创建索引
        strSQL := CREATE INDEX t_audit_||curMMDD||_INDEX_||time_column_name|| ON t_audit_||curMMDD|| (||time_column_name||); ;
        EXECUTE strSQL;
    END IF;
 
    -- 插入数据到子分区!
    strSQL := INSERT INTO t_audit_||curMMDD|| SELECT $1.*;
    EXECUTE strSQL USING NEW;
    RETURN NULL; 
END
$BODY$
LANGUAGE plpgsql;
 

-- 创建触发器,insert操作时触发
CREATE TRIGGER insert_tbl_partition_trigger
  BEFORE INSERT
  ON t_audit
  FOR EACH ROW
  EXECUTE PROCEDURE auto_insert_into_tbl_partition(time);
技术分享图片

整体就是这段代码,就可以完成一个简易的按天分表的操作。

postgres 按日分表

原文:https://www.cnblogs.com/XiaoBoya/p/12672977.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!