postgresql分区

--创建主表
CREATE TABLE "public"."test" (
  "id" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
  "createtime" timestamptz(6) NOT NULL,
  CONSTRAINT "test_pkey" PRIMARY KEY ("id")
);


--创建子表
create table test_1904 check ( createtime >= date'2019-04-01' and createtime < date'2019-05-01' ) inherits (test);
create table test_1905 check ( createtime >= date'2019-05-01' and createtime < date'2019-06-01' ) inherits (test);


--插入函数
create or replace function test_insert_function()
returns trigger as $$
begin
	if( new.createtime >= date'2019-04-01' and new.createtime < date'2019-05-01' ) then
		insert into test_1904 values (new.*);
	elsif ( new.createtime >= date'2019-05-01' and new.createtime <date'2019-06-01') then
		insert into test_1905 values( new.* );
	end if;
	return null;
end;
$$
language plpgsql;
 
 
--插入触发器
create trigger test_insert_trigger before insert on test for each row execute procedure test_insert_function();


--子表更新函数(每一个字表都要有这个函数,寿命应和字表一致)
create or REPLACE FUNCTION testupdate1905() returns trigger as $$
begin
if ( new.createtime < DATE'2019-05-01' or new.createtime >= DATE'2019-06-01' ) then
	delete from test where id = new.id;
	INSERT INTO test(id, createtime) VALUES (new.*);
end if;
	return null;
end $$ language plpgsql;


create or REPLACE FUNCTION testupdate1904() returns trigger as $$
begin
if ( new.createtime < DATE'2019-04-01' or new.createtime >= DATE'2019-05-01' ) then
	delete from test where id = new.id;
	INSERT INTO test(id, createtime) VALUES (new.*);
end if;
	return null;
end $$ language plpgsql;



--子表更新触发器(同子表更新函数)
create trigger updatetest1905 before update of  createtime on public.test_1905 for each row execute procedure testupdate1905();

create trigger updatetest1904 before update of  createtime on public.test_1904 for each row execute procedure testupdate1904();



--测试数据
INSERT INTO "public"."test"("id", "createtime") VALUES ('3', '2019-05-23 00:00:00+08');


update test set createtime = '2019-04-12 00:00:00' where id = '3'
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值