尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

如何10分钟安装配置pg_pathman:从零到第一个分区的完整指南(含2个常见坑)

如何10分钟安装配置pg_pathman:从零到第一个分区的完整指南(含2个常见坑) 如何10分钟安装配置pg_pathman从零到第一个分区的完整指南含2个常见坑【免费下载链接】pg_pathmanPartitioning tool for PostgreSQL项目地址: https://gitcode.com/gh_mirrors/pg/pg_pathman 还在为大表性能头疼吗本文带你用 10 分钟完成pg_pathman的安装与配置。pg_pathman 是 PostgreSQL 的经典表分区工具分区扩展支持 RANGE 与 HASH 两种分区方案能显著加速海量数据的查询与管理。 先说明一句pg_pathman 当前版本为 1.5.12支持 PostgreSQL 11 ~ 15。项目已进入维护状态不再新功能开发官方建议新库可评估 PostgreSQL 10 自带的原生分区。但若你维护的是 11~15 的存量库、又想要比原生分区更强的管理函数拆分/合并/自动建分区/跨分区更新等pg_pathman 依然是利器。一、安装前准备版本兼容性快速核对在动手前先确认你的 PostgreSQL 版本在支持范围内PostgreSQL 版本是否需要打内核补丁12、13❌ 不需要11、14、15✅ 需要 core-patchPostgres Pro Standard / Enterprise 11~15✅ 已内置补丁11 / 14 / 15 版本对应的内核补丁已随仓库提供见补丁目录patches/内含各 REL 版本的 core diff 文件。二、一键编译安装 pg_pathman含坑11. 获取源码git clone https://gitcode.com/gh_mirrors/pg/pg_pathman cd pg_pathman2. 编译并安装make install USE_PGXS1⚠️坑1PG_CONFIG 指错 PostgreSQL如果你的 PostgreSQL 是非默认安装自己编译、Docker 容器、多版本共存USE_PGXS1会默认找系统里的第一个pg_config可能装错版本导致找不到共享库。解决办法是显式指定make install USE_PGXS1 PG_CONFIG/your/pg/path/bin/pg_config可用which -a pg_config或ls /usr/lib/postgresql/*/bin确认正确路径。安装成功后pg_pathman的.so会进入 PostgreSQL 的lib目录扩展脚本pg_pathman--1.5.sql会进入extension目录见pg_pathman.control中的声明。三、修改配置预加载库含坑21. 修改 postgresql.conf找到postgresql.conf修改或追加这一行shared_preload_libraries pg_pathman仓库中的conf.add文件就是这一行的现成配置示例可直接参考。2. 重启数据库必须sudo systemctl restart postgresql⚠️坑2只改了配置忘了重启 / 与其他扩展顺序冲突shared_preload_libraries只在数据库启动时生效reload无效必须 restart。另外 pg_pathman 使用了ProcessUtility_hook等钩子函数与同样使用钩子的扩展如pg_stat_statements可能偶发冲突。若遇到怪异报错请按顺序书写shared_preload_libraries pg_stat_statements, pg_pathman简单记忆把 pg_pathman 放在最后让它最先执行钩子。四、创建扩展3 条 SQL 搞定连接数据库psql -U postgres执行CREATE SCHEMA pathman; GRANT USAGE ON SCHEMA pathman TO PUBLIC; CREATE EXTENSION pg_pathman WITH SCHEMA pathman;验证是否加载成功SELECT pathman_version();返回类似1.5.12的完整版本号即代表安装成功 安全小贴士建议把 pg_pathman 装到一个干净的 schema并限制非超级用户的 CREATE 权限避免函数被恶意重载search-path 攻击面。五、10 分钟内的第一个分区RANGE 分区实战下面用一个日志表按天分区的经典场景走完全流程。1. 建表并灌入示例数据CREATE TABLE journal ( id SERIAL, dt TIMESTAMP NOT NULL, level INTEGER, msg TEXT ); CREATE INDEX ON journal(dt); INSERT INTO journal (dt, level, msg) SELECT g, random() * 6, md5(g::text) FROM generate_series(2015-01-01::date, 2015-12-31::date, 1 minute) g;2. 一条函数调用完成 RANGE 分区SELECT create_range_partitions(journal, dt, 2015-01-01::date, 1 day::interval);这一步会按dt列、以1 天为步长自动创建 365 个分区并把父表数据迁移到各分区父表随后被自动禁用只留索引原型。3. 看效果查询计划只扫 2 个分区EXPLAIN SELECT * FROM journal WHERE dt 2015-06-01 AND dt 2015-06-03;计划里只会出现journal_152、journal_153两个分区的 Seq Scan —— 这就是分区裁剪的威力扫描量从全年直接缩小到 2 天。4. 顺手体验 HASH 分区CREATE TABLE items (id SERIAL PRIMARY KEY, name TEXT, code BIGINT); SELECT create_hash_partitions(items, id, 100);按id哈希成 100 个分区插入时由PartitionFilter自定义计划节点自动把行路由到对应分区无需触发器。六、常用管理命令速查清单 完成初始分区后日常运维高频函数场景函数追加默认步长的新分区append_range_partition(journal)指定范围建分区add_range_partition(journal, 2016-01-01::date, 2016-01-07::date)拆分某个分区split_range_partition(journal_366, 2016-01-03::date)合并相邻分区merge_range_partitions(journal_archive, journal_1)挂载已有表/外部表为分区attach_range_partition(journal, journal_archive, 2014-01-01::date, 2015-01-01::date)卸载分区detach_range_partition(journal_archive)查看所有分区及范围SELECT * FROM pathman_partition_list;大表无锁迁移数据partition_table_concurrently(journal) 小贴士RANGE 分区默认开启自动建分区——当 INSERT 的数据超出已有范围时pg_pathman 会自动追加新分区日志表几乎可以零维护运行。七、排错锦囊开关与应急开关GUC作用pg_pathman.enable off整体禁用 pg_pathman回退到原生继承机制pg_pathman.enable_runtimeappend控制运行时分区裁剪节点pg_pathman.enable_partitionfilter控制 INSERT 自动路由disable_pathman_for(表名)对某张表永久停用分区机制数据保持不变遇到疑难杂症时先看 GUC 开关逐项关闭定位再看pathman_config主配置表和pathman_config_params可选参数表中的记录是否与预期一致。八、写在最后至此你已用大约 10 分钟完成了 pg_pathman 的编译安装 → 配置预加载 → 创建扩展 → 建立第一个 RANGE 分区的完整闭环并避开了 PG_CONFIG 指错版本、忘记重启/扩展顺序冲突这两个最常见的坑。后续可以进一步探索项目源码核心逻辑位于src/目录如pl_range_funcs.c实现 RANGE 分区函数、partition_router.c实现跨分区 UPDATE 路由测试用例在sql/与tests/目录中都是很好的学习材料。祝你的大表从此飞起【免费下载链接】pg_pathmanPartitioning tool for PostgreSQL项目地址: https://gitcode.com/gh_mirrors/pg/pg_pathman创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表