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');
分类:
PostgreSQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 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)