pg_partman
用于按时间或 ID 管理分区表的扩展
仓库
pgpartman/pg_partman
https://github.com/pgpartman/pg_partman
源码
pg_partman-5.4.2.tar.gz
pg_partman-5.4.2.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_partman | 5.4.3 | OLAP | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 2510 | pg_partman | 否 | 是 | 否 | 是 | 否 | 否 | - |
| 相关扩展 | plpgsql citus pg_fkpart timescaledb periods emaj pg_cron plproxy temporal_tables |
|---|---|
| 下游依赖 | timeseries |
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PGDG | 5.4.3 | 1817161514 | pg_partman | plpgsql |
| RPM | PGDG | 5.4.3 | 1817161514 | pg_partman_$v | - |
| DEB | PGDG | 5.4.3 | 1817161514 | postgresql-$v-partman | - |
构建
您可以使用 pig build 命令构建 pg_partman 扩展的 RPM / DEB 包:
pig build pkg pg_partman # 构建 RPM / DEB 包
安装
您可以直接安装 pg_partman 扩展包的预置二进制包,首先确保 PGDG 仓库已经添加并启用:
pig repo add pgdg -u # 添加 PGDG 仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_partman; # 当前活跃 PG 版本安装
pig ext install -y pg_partman -v 18 # PG 18
pig ext install -y pg_partman -v 17 # PG 17
pig ext install -y pg_partman -v 16 # PG 16
pig ext install -y pg_partman -v 15 # PG 15
pig ext install -y pg_partman -v 14 # PG 14
dnf install -y pg_partman_18 # PG 18
dnf install -y pg_partman_17 # PG 17
dnf install -y pg_partman_16 # PG 16
dnf install -y pg_partman_15 # PG 15
dnf install -y pg_partman_14 # PG 14
apt install -y postgresql-18-partman # PG 18
apt install -y postgresql-17-partman # PG 17
apt install -y postgresql-16-partman # PG 16
apt install -y postgresql-15-partman # PG 15
apt install -y postgresql-14-partman # PG 14
创建扩展:
CREATE EXTENSION pg_partman CASCADE; -- 依赖: plpgsql
用法
pg_partman 使用 PostgreSQL 原生声明式分区(v5.0+)自动创建和管理基于时间和基于数字的分区集。它处理新分区的添加和旧分区的按保留策略删除,并提供可选的后台工作进程用于自动维护。
创建扩展
CREATE SCHEMA partman;
CREATE EXTENSION pg_partman SCHEMA partman;
创建基于时间的分区集
CREATE TABLE public.measurements (
id bigserial,
created_at timestamptz NOT NULL DEFAULT now(),
value numeric
) PARTITION BY RANGE (created_at);
SELECT partman.create_parent(
p_parent_table := 'public.measurements',
p_control := 'created_at',
p_interval := '1 day'
);
创建基于序列/ID 的分区集
CREATE TABLE public.events (
id bigserial,
data text
) PARTITION BY RANGE (id);
SELECT partman.create_parent(
p_parent_table := 'public.events',
p_control := 'id',
p_interval := '100000'
);
运行维护
手动触发分区维护(创建新分区、删除过期分区):
SELECT partman.run_maintenance();
或针对特定表:
SELECT partman.run_maintenance(p_parent_table := 'public.measurements');
配置保留策略
更新配置以设置保留策略:
UPDATE partman.part_config
SET retention = '30 days',
retention_keep_table = false
WHERE parent_table = 'public.measurements';
后台工作进程
在 postgresql.conf 中启用自动维护:
shared_preload_libraries = 'pg_partman_bgw'
pg_partman_bgw.interval = 3600 -- 每小时运行一次(秒)
pg_partman_bgw.dbname = 'mydb'
将现有数据迁移到分区
CALL partman.partition_data_proc('public.measurements');
显示分区
SELECT * FROM partman.show_partitions('public.measurements');
撤销分区
CALL partman.undo_partition_proc('public.measurements');