井喷:修了 28 个 CVE、110 个 BUG,PG 最新小版本发布

井喷:修了 28 个 CVE、110 个 BUG,PG 最新小版本发布

💡 原文中文,约7800字,阅读约需19分钟。
📝

内容提要

PostgreSQL 发布 18.6、17.11、16.15、15.19、14.24 及 19 Beta 3,修复 28 个安全漏洞和 110 多个 Bug,建议尽快升级。18.5 因回归问题未发布。升级后需检查 GIN 索引表的 reltuples 值,并重建 btree_gist 和 ltree 相关索引。PostgreSQL 14 将于 2026 年 11 月停止支持。

🔎

延伸解读

升级后必须检查的三类索引问题

本次更新修复了并行构建 GIN 索引时 reltuples 被错误设置为 Infinity 或 NaN 的问题,这会导致 autovacuum 和 autoanalyze 永远不再处理该表。此外,btree_gist 在 float 或 bit 列上的索引、以及 ltree 在超过约 14653 个标签的值上的 B-tree 索引也可能需要重建。升级后应主动检查并重建,否则可能继续遭遇查询错误或索引损坏。

PostgreSQL 14 用户需尽快规划升级

PostgreSQL 14 将于 2026 年 11 月 12 日停止接收修复更新。继续在生产环境使用将无法获得安全补丁和 Bug 修复。建议在 EOL 前规划升级到仍受支持的版本,例如 15、16、17 或 18。升级前需评估应用兼容性,并参考官方升级文档选择 pg_upgrade 或逻辑复制等方式。

本次安全修复的严重程度与影响范围

本次修复的 28 个安全漏洞中,多个 CVSS 评分达到 8.8,涉及正则表达式、to_char、PL/Perl、pg_stat_statements、pg_dump 等组件的堆缓冲区溢出,可导致执行任意代码。还有 psql 的 COPY FROM STDIN 提前失败后执行后续数据行、逻辑解码通过 dlopen 加载任意文件等高风险问题。所有受支持版本均受影响,应尽快升级。

PostgreSQL 19 Beta 3 的测试重点与注意事项

PostgreSQL 19 Beta 3 修复了 GROUP BY ALL 被撤销、FOR PORTION OF 时态表语法、逻辑复制序列同步、postgres_fdw 下推数组比较等多个问题。官方不建议在生产环境运行 Beta 版,但鼓励用实际工作负载测试,以帮助发现 Bug 和回归。Beta 阶段数据库行为、功能细节和 API 仍可能小幅调整,测试反馈将影响正式版发布节奏。

Q&A

PostgreSQL 这次发布了哪些版本?

发布了 PostgreSQL 18.6、17.11、16.15、15.19、14.24 以及 PostgreSQL 19 Beta 3。

这次更新修复了多少个安全漏洞和 Bug?

修复了 28 个安全漏洞和 110 多个 Bug。

为什么 PostgreSQL 18.5 没有发布?

因为发现了一个回归问题,所以 18.5 最终没有发布,版本号从 18.4 直接跳到了 18.6。

升级后需要检查或重建哪些索引?

需要检查 GIN 索引表的 reltuples 值,并重建 btree_gist 和 ltree 相关索引。

PostgreSQL 14 什么时候停止支持?

PostgreSQL 14 将于 2026 年 11 月 12 日停止接收修复更新。

如何检查 GIN 索引表的 reltuples 值?

可以使用以下查询列出所有拥有 GIN 索引的表及其 reltuples 值:SELECT DISTINCT t.oid::regclass, t.reltuples FROM pg_class AS t JOIN pg_index AS i ON t.oid = i.indrelid JOIN pg_class AS ic ON i.indexrelid = ic.oid WHERE t.relhasindex AND ic.relam = 2742; 如果值不正确,执行 ANALYZE 或创建另一个索引来重新设置。

升级到 PostgreSQL 19 Beta 3 需要注意什么?

PostgreSQL 19 Beta 3 是测试版本,不建议在生产环境运行,但鼓励使用实际工作负载进行测试。升级需要采用类似大版本升级的方式,例如使用 pg_upgrade 或 pg_dump/pg_restore。

🏷️

标签

➡️

继续阅读