postgre 创建分区表

PG 创建分区表

1.建表

CREATE TABLE  "exchange_detail" (
  "id" int8 primary key,
  "exchange_type" int2,
  "exchange_text" varchar(255),
  "detail_user" int8,
  "create_time" timestamp(6)
);

COMMENT ON COLUMN "public"."exchange_detail"."id" IS '置换记录id';
COMMENT ON COLUMN "public"."exchange_detail"."exchange_type" IS '置换类型';
COMMENT ON COLUMN "public"."exchange_detail"."exchange_text" IS '置换描述';
COMMENT ON COLUMN "public"."exchange_detail"."detail_user" IS '置换用户';
COMMENT ON COLUMN "public"."exchange_detail"."create_time" IS '创建时间'; 

2.创建分区表 直接继承exchange_detail表就好了。一般的子表不需要加字段。可以建立多个分区

 create table exchange_detail01
(CHECK (extract(month from  create_time) = 1))
INHERITS (exchange_detail);

2.1 给字表增加主键

ALTER TABLE exchange_detail01 ADD PRIMARY KEY (id);

3.给子表创建索引 这个索引一般都是创建规则的字段

create index exchange_detail01_create_time ON exchange_detail01(create_time);

4.创建触发器函数

CREATE OR REPLACE FUNCTION  exchange_detail_trigger() RETURNS  trigger AS $$
BEGIN
 
IF (
extract(month from  NEW .create_time) = 1 
) THEN
INSERT INTO exchange_detail01
VALUES
(NEW .*) ;
ELSEIF (
extract(month from  NEW .create_time) = 2
) THEN
INSERT INTO exchange_detail02
VALUES
(NEW .*) ;
ELSEIF (
extract(month from  NEW .create_time) = 3
) THEN
INSERT INTO exchange_detail03
VALUES
(NEW .*) ;
ELSEIF (
extract(month from  NEW .create_time) = 4
) THEN
INSERT INTO exchange_detail04
VALUES
(NEW .*) ;
ELSEIF(
extract(month from  NEW .create_time) = 5
)THEN
INSERT INTO exchange_detail05
VALUES
(NEW .*) ;
ELSEIF(
extract(month from  NEW .create_time) = 6
)THEN
INSERT INTO exchange_detail06
VALUES
(NEW .*) ;
ELSEIF(
extract(month from  NEW .create_time) = 7
)THEN
INSERT INTO exchange_detail07
VALUES
(NEW .*) ;
ELSEIF(
extract(month from  NEW .create_time) = 8
)THEN
INSERT INTO exchange_detail08
VALUES
(NEW .*) ;
ELSEIF(
extract(month from  NEW .create_time) = 9
)THEN
INSERT INTO exchange_detail09
VALUES
(NEW .*) ;
ELSEIF(
extract(month from  NEW .create_time) = 10
)THEN
INSERT INTO exchange_detail10
VALUES
(NEW .*) ;
ELSEIF(
extract(month from  NEW .create_time) = 11
)THEN
INSERT INTO exchange_detail11
VALUES
(NEW .*) ;
ELSEIF(
extract(month from  NEW .create_time) = 12
)THEN
INSERT INTO exchange_detail12
VALUES
(NEW .*) ;
ELSE
RAISE EXCEPTION 'Date out of range!' ;
END
IF ; RETURN NULL ;
END ; $$ LANGUAGE plpgsql;

5.创建触发器

CREATE TRIGGER exchange_detail_trigger BEFORE INSERT ON exchange_detail
FOR EACH ROW
EXECUTE PROCEDURE exchange_detail_trigger();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值