PostgreSQL09-分区表

9.分区表

什么是分区表

分区表就是根据分区策略,将数据数据分散到不同的子表中,并通过父表建立关联关系,从而实现数据物理上的分区。

PG10版本之前,使用继承+触发器实现分区表,步骤较为繁琐。

PG10版本开始,采用内置分区,只支持范围分区和列表分区,PG11支持HASH分区

创建分区表

1.创建父表,指定分区键和分区策略。
create table log_par(
    id serial,
    user_id int4,
    create_time timestamp(0) without time zone)
partition by range(create_time);             分区方式:范围分区。分区键:create_time

2.创建分区,指定分区表的父表和分区键的取值范围,注意分区键的范围不可重叠。
create table log_par_history partition of log_par for value from (unbouned) to ('2017-01-01');
create table log_par_201701 partition of log_par for value from ('2017-01-01') to ('2017-02-01');
create table log_par_201702 partition of log_par for value from ('2017-02-01') to ('2017-03-01');
...
按创建时间分区,一个月一张表

3.在分区上创建相应索引,通常情况必须给分区键创建索引,非分区键的索引可根据实际应用场景选择是否创建。
create index idx_log_par_history_ctime on log_par_history using btree(create_time);
create index idx_log_par_201701_ctime on log_par_201701 using btree(create_time);
create index idx_log_par_201702_ctime on log_par_201701 using btree(create_time);
...

使用

插入连续数据
insert into log_par(user_id, create_time) select round(100*random()), generate_series('2017-01-01'::date, '2018-01-01'::date, '1 day');

select round 四舍五入函数
generate_series 生成连续数据

查看
select count(*) from log_par;              这种查询会查询到子表
select count(*) from  only log_par;     只查询父表
\dt+ log_par*     查看各表大小

添加分区

接着分区范围,重复创建分区的第二和第三步骤

删除分区

drop table log_par_201701;     直接删除分区,数据也会一并删除
或
alter table log_par detach partition log_par_201701;    和父表解除绑定,保留数据,方便恢复

恢复
alter table log_par attach partition log_par_201701 for values from ('2017-01-01') to ('2017-02-01');
posted @   立勋  阅读(107)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示