PostgreSQL表分区 使用案例脚本
这边介绍一张表按年份分区的脚本,原表bflow。
1.创建一张父表 bflow_1
重要的是 PARTITION BY LIST (fqyear) 这句话
DROP TABLE IF EXISTS “bflow_v1”;
CREATE TABLE “bflow_v1” (
“id” int4 NOT NULL DEFAULT nextval(‘bflow_id_seq’::regclass),
“keyval” varchar(32) COLLATE “pg_catalog”.“default”,
“advice” varchar(512) COLLATE “pg_catalog”.“default”,
“opertype” varchar(32) COLLATE “pg_catalog”.“default”,
“btype” varchar(32) COLLATE “pg_catalog”.“default”,
“cbtype” varchar(64) COLLATE “pg_catalog”.“default”,
“fqyear” varchar(64) COLLATE “pg_catalog”.“default”
) PARTITION BY LIST (fqyear);
2.按fqyear年份分区这边分三年
如果想要按具体时间分区,写个触发器,
插入时分别按时间判断插入哪个分区表。
这边脚本如下:
CREATE TABLE bflow_v1_2021 PARTITION OF bflow_v1 FOR VALUES IN (2021);
CREATE TABLE bflow_v1_2022 PARTITION OF bflow_v1 FOR VALUES IN (2022);
CREATE TABLE bflow_v1_2023 PARTITION OF bflow_v1 FOR VALUES IN (2023);
这边注意如果有索引主键等等,自己加到分区表上
如:
ALTER TABLE “bflow_v1_2023” ADD CONSTRAINT “bflow_v1_2023_2” PRIMARY KEY (“id”);
3.更新新表数据,最后自己替换下表名吧
–更新原表分区年份
update bflow set fqyear=to_char(receivetime,‘yyyy’);
–更新历史数据
insert into bflow_v1
select * from bflow ;
4.结果截图: