pg_kpart 1.0 发布

发布于 2026-06-16,HexaCluster
相关开源软件

原文:https://www.postgresql.org/about/news/pg_kpart-version-10-3316/ 发布日期:2026-06-16 作者:HexaCluster

曼谷,泰国,2026 年 6 月 12 日

pg_kpart:拒绝未使用分区键却扫描全部分区的查询

pg_kpart 是一个 PostgreSQL 扩展,用于拒绝那些针对分区表、却没有在分区键上提供可用谓词、从而会扫描全部分区的查询。它可以避免因为遗漏 WHEREJOIN 中的分区键条件,而意外触发整棵分区层级的全量扫描。

作为 DBA,你几乎肯定遇到过这种查询:命中了分区表,却没有使用分区键。在持有数亿乃至数十亿行数据的表上,这往往就是一场灾难:PostgreSQL 别无选择,只能扫描所有分区,服务器 I/O 子系统被打满,整台实例上所有连接的整体性能都会随之崩塌。

它强制执行的规则非常直接:如果针对受保护分区表的查询无法剪枝掉任何分区,这条查询就不允许执行。开发者会得到一条明确的错误,而不是制造一次拖垮全局的 I/O 风暴;随后必须把查询改写为按分区键过滤,这也正是分区设计原本鼓励的访问方式。

pg_kpart 把“请始终按分区键过滤”从一种脆弱、依赖每位开发者都不出错的约定,变成了数据库可以直接保证的硬约束。它还提供审计模式用于平滑上线,支持黑名单/白名单范围控制以精确保护关键表,并提供专门的 SQLSTATE 方便应用程序对违规行为做出处理,因此很容易嵌入生产工作流。如果你管理着大型分区表,又不想把系统稳定性寄托在下一条“忘了带分区键”的查询上,这个扩展值得关注。

更多信息可见作者博客文章: - https://hexacluster.ai/blog/pg-kpart-postgresql-extension

链接与致谢

pg_kpart 是一个开放项目,欢迎任何形式的贡献,共同把它打磨得更好。你可以通过 GitHub 提交想法、功能请求或补丁。

感谢提交补丁的开发者,以及报告缺陷和提出功能请求的用户,他们都在 ChangeLog 中得到致谢。

相关链接: - 文档:https://github.com/HexaCluster/pg_kpart/blob/main/README.md - 下载:https://github.com/hexacluster/pg_kpart/releases - 开发仓库:https://github.com/hexacluster/pg_kpart - 更新日志:https://github.com/hexacluster/pg_kpart/blob/master/ChangeLog

关于 pg_kpart

pg_kpart 的目标,是为 PostgreSQL DBA 提供一款帮助正确使用分区能力的工具。

该工具由 HexaCluster Corp 创建,现由 Gilles Darold 维护。

pg_kpart 运行于 Linux 平台,并采用 PostgreSQL License 发布。