博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自动创建分区表及触发器
阅读量:5882 次
发布时间:2019-06-19

本文共 2128 字,大约阅读时间需要 7 分钟。

  hot3.png

分区表自动生成脚本

CREATE FUNCTION "public"."create_table_partition"(IN tablename varchar) RETURNS "text" 	AS $BODY$ declare  date_suffix varchar(6);  sqlCon varchar;  p_table varchar;begin  for i in -72..72 loop     select to_char(now() + interval '1 month' * i,'yyyyMM') into date_suffix;     p_table='p_'||tablename||'_'||date_suffix;     raise notice '%',p_table;     sqlCon = 'create table '||p_table||' (     check ( finance_month = '||date_suffix||' )            ) INHERITS ('||tablename||')';     EXECUTE sqlCon;  end loop;RETURN date_suffix;end;$BODY$	LANGUAGE plpgsql	COST 100	CALLED ON NULL INPUT	SECURITY INVOKER	VOLATILE;

这个主要是创建前后6年的分区,每个分区表是以月为后缀的,-72...72这个是时间范围可以自行修改。 再来看看自动创建触发器的脚本

CREATE FUNCTION "public"."create_table_insert_trigger"(IN tablename varchar) RETURNS "text" 	AS $BODY$ declare  date_suffix varchar(6);  sqlCon varchar;  p_table varchar;  tmp integer :=0;  sqlTrigger varchar;begin  sqlCon = 'CREATE OR REPLACE FUNCTION '||tablename||'_insert_trigger()           RETURNS TRIGGER AS $$               BEGIN           ';   sqlTrigger = 'CREATE TRIGGER trg_insert_'||tablename||' BEFORE INSERT ON "public"."'||tablename||'" FOR EACH ROW EXECUTE PROCEDURE "'||tablename||'_insert_trigger"();COMMENT ON TRIGGER "trg_insert_'||tablename||'" ON "public"."'||tablename||'" IS NULL;';           for i in -72..72 loop    select to_char(now() + interval '1 month' * i,'yyyyMM') into date_suffix;    p_table='p_'||tablename||'_'||date_suffix;    IF tmp=0 THEN      sqlCon = sqlCon || 'IF ( NEW.finance_month = '||date_suffix||') THEN          INSERT INTO '||p_table||' VALUES (NEW.*);         ';      tmp =1;    ELSE                            sqlCon = sqlCon || 'ELSIF ( NEW.finance_month = '||date_suffix||') THEN          INSERT INTO '||p_table||' VALUES (NEW.*);         ';    END if;  end loop;  sqlCon = sqlCon || 'END IF;    RETURN NULL;     END;      $$      LANGUAGE plpgsql;';EXECUTE sqlCon;EXECUTE sqlTrigger;RETURN sqlCon;end;$BODY$	LANGUAGE plpgsql	COST 100	CALLED ON NULL INPUT	SECURITY INVOKER	VOLATILE;

这个脚本会将前面通过分区脚本创建的分区表中加上相应的触发器,好了,脚本很好理解就不多说了,有问题请留言。

转载于:https://my.oschina.net/sucre/blog/742856

你可能感兴趣的文章
CentOS7 'Username' is not in the sudoers file. This incident will be reported
查看>>
HashMap,HashTable,HashSet区别(转)
查看>>
关于php上传文件
查看>>
360浏览器内核控制标签meta说明
查看>>
android AsyncTask
查看>>
poj 3225 【线段树】
查看>>
序列化
查看>>
Linux 查询命令
查看>>
Some tips for your Number 157842 369 the earth number
查看>>
梦网云通讯API接口匹配状态报告规则
查看>>
Linux之线程管理
查看>>
Cocos2d-x游戏《雷电大战》开源啦!要源代码要资源快快来~~
查看>>
常见随机变量的数学期望和方差
查看>>
eclipse黄色警告(finally block does not complete normally) ,不建议在finally中使用return语句...
查看>>
msyql sql语句收集
查看>>
面试题一份
查看>>
关于ubuntu上执行错误命令报错
查看>>
使用grep恢复被删文件内容
查看>>
【转】Google 的眼光
查看>>
在同一台电脑上使用两个github账户
查看>>