PostgreSQL 18.6、17.11、16.15、15.19、14.24 及 19 Beta 3 正式发布!

John Doe 八月 14, 2026

PostgreSQL 全球开发组发布了所有受支持版本的例行更新,包括 18.6、17.11、16.15、15.19、14.24 五个正式版本,同时推出了 PostgreSQL 19 的第三个测试版本(Beta 3)。本次更新累计修复了过去数月上报的 28 个安全漏洞,以及 110 余个功能缺陷

目录

image

本次发布跳过了 PostgreSQL 18.4 到 18.5 版本,其中 18.5 因存在回归缺陷未正式对外发布。

更新完成后,有三类问题可能需要您执行额外的修复操作,下文将详细说明,分别涉及:

  • 并行 GIN 索引构建
  • btree_gist 扩展
  • ltree 扩展

完整的变更清单请查阅官方版本说明。

PostgreSQL 14 终止维护通知

PostgreSQL 14 将于 2026 年 11 月 12 日 停止接收所有修复更新。如果您的生产环境仍在运行 PostgreSQL 14,建议尽快制定升级计划,迁移至更新的受支持版本。更多信息可参考版本支持策略。

安全漏洞修复

本次更新覆盖了以下安全漏洞,各漏洞的详细影响范围与技术细节可通过官方链接查看:

  • CVE-2026-6464:psql 的 COPY FROM STDIN 提前失败时,会将数据行当作 psql 命令执行(CVSS v3.1: 8.1)
  • CVE-2026-6469ALTER TABLE ALTER TYPE 会重置扩展统计信息的所有权(CVSS v3.1: 3.8)
  • CVE-2026-6470:未对类型的 USAGE 权限进行校验(CVSS v3.1: 4.3)
  • CVE-2026-6471:逻辑解码可加载任意动态库文件(CVSS v3.1: 7.2)
  • CVE-2026-14662tsvectortsquery 存在整数溢出导致的内存分配不足(CVSS v3.1: 8.8)
  • CVE-2026-14663pgcrypto 对 OpenSSL 禁用的加密算法会静默以明文进行加解密(CVSS v3.1: 6.5)
  • CVE-2026-14664:正则表达式堆缓冲区溢出可导致任意代码执行(CVSS v3.1: 8.8)
  • CVE-2026-14666:行级安全策略缓存未感知角色变更(CVSS v3.1: 4.2)
  • CVE-2026-14668:选择性估算器中的 ctid 类型混淆可泄露任意内存读取的推导信息(CVSS v3.1: 8.1)
  • CVE-2026-14669to_char 堆缓冲区溢出可导致任意代码执行(CVSS v3.1: 8.8)
  • CVE-2026-14670:plperl 绑定对象堆缓冲区溢出可导致任意代码执行(CVSS v3.1: 8.8)
  • CVE-2026-14671refint 计划缓存类型混淆可导致任意代码执行(CVSS v3.1: 8.8)
  • CVE-2026-14672:非默认 scram_iterations 配置下的响应时长差异可被用于探测用户是否存在(CVSS v3.1: 5.3)
  • CVE-2026-14673amcheck 未清理不可信的搜索路径(CVSS v3.1: 3.8)
  • CVE-2026-14676pg_stat_statements 堆缓冲区溢出可导致任意代码执行(CVSS v3.1: 8.8)
  • CVE-2026-14677:32 位平台下 pltclplperl 存在整数溢出导致的内存分配不足(CVSS v3.1: 8.8)
  • CVE-2026-14678pg_trgmpicksplit 函数存在缓冲区越界读取(CVSS v3.1: 4.3)
  • CVE-2026-14679:参数匹配中的栈缓冲区溢出会向服务器内存写入 0x0 和 0x1(CVSS v3.1: 8.2)
  • CVE-2026-14680:通过 internal 类型参数实现类型混淆(CVSS v3.1: 8.8)
  • CVE-2026-14681:GSSAPI 加密与 SSL 联用时加密强制逻辑失效(CVSS v3.1: 4.2)
  • CVE-2026-15741:表达式反解析存在 SQL 注入风险,可通过 EXTRACT 参数触发(CVSS v3.1: 8.8)
  • CVE-2026-15742fuzzystrmatch 存在整数溢出可写入近乎任意地址(CVSS v3.1: 8.8)
  • CVE-2026-16238pg_restore_attribute_stats() 中的类型混淆可导致任意代码执行(CVSS v3.1: 8.8)
  • CVE-2026-16239:游标 CLOSE + DECLARE 中的类型混淆可导致任意代码执行(CVSS v3.1: 8.8)
  • CVE-2026-16241:ECPG 整数下溢可导致客户端崩溃(CVSS v3.1: 3.8)
  • CVE-2026-18024ascii() 函数存在缓冲区越界读取(CVSS v3.1: 4.3)
  • CVE-2026-18408:psql 的 \unrestrict 命令允许 pg_dump 源端的超级用户在 psql 客户端执行任意代码(CVSS v3.1: 8.8)
  • CVE-2026-19385:pg_dump 堆缓冲区溢出可导致任意代码执行(CVSS v3.1: 8.8)

Bug 修复与功能优化

本次更新累计修复了过去数月上报的 110 余个缺陷。

以下问题仅影响 PostgreSQL 14、15、16 版本,因影响严重在此特别说明:

修复了重放旧次版本生成的 WAL(预写日志)时可能触发的自死锁问题。该回归缺陷由上一批次小版本更新引入,可能导致跟随旧次版本主库运行的备库陷入停滞。

以下问题主要针对 PostgreSQL 18 版本修复,其中多数问题也同时影响其他受支持版本:

  1. 修复并行 GIN 索引构建逻辑:解决了无法正确更新 pg_class 中表的 reltuples(行估计值)的问题。此前并行工作进程可能上报未初始化的行计数,导致 reltuples 被写入无效值(包括 Infinity 无穷大或 NaN 非数值)。该异常会导致自动清理(autovacuum)和自动分析(autoanalyze)永远跳过对应表,且问题无法自行恢复。如果您的业务表带有 GIN 索引,建议更新后校验 reltuples 取值是否合理,识别与修复方法见「更新说明」章节。
  2. 修复 btree_gist 扩展的多项问题:包括修复 float4/float8 类型的 NaN 处理逻辑(含 NaN 的列可能返回错误查询结果),以及修正索引构建时 bit/bit varying 类型值的排序规则。更新后,您可能需要重建浮点型或位类型列上的 btree_gist 索引,详见「更新说明」。
  3. 修复 ltree 比较中的整数溢出:包含约 14653 个以上标签的 ltree 值可能出现比较错误,表现为 B 树索引损坏。如果您使用 ltree 扩展,更新后可能需要重建受影响的索引,详见「更新说明」。
  4. 修复范围分区表的分区裁剪逻辑,避免在应当扫描默认分区时将其错误跳过 —— 此前该问题会导致查询结果缺失数据行。
  5. 修复带外表分区的分区表的多项缺陷:当运行时分区裁剪判定部分分区无需扫描时,对外服务器的进行中请求可能处理异常,引发执行失败。
  6. 修复了带 OLD / NEW 关键字的 RETURNING 子句的多项问题。
  7. 优化了多连接键、且存在大量 NULL 值场景下的哈希连接性能。
  8. 修复优化器的多项结果错误问题:包括数组为空时的 value IN (array) 判断、使用 EXCLUDE 子句或缺少 ORDER BYCOUNT() 窗口函数等场景。
  9. 补充了容器类型(数组、复合类型、范围类型)等值比较的哈希能力校验。缺少该校验时,优化器可能选择哈希执行计划,进而在运行时抛出「无法识别哈希函数」的错误。
  10. 修复排除约束索引的分区附加逻辑,同时解决了分区排除约束的转储与恢复异常。
  11. 修复了对延迟唯一性约束对应的索引执行 REINDEX CONCURRENTLY(并发重建索引)时,可能误报约束违反的问题。
  12. 恢复了一项索引扫描优化:当索引与表达式的排序规则不同时,可将 LIKE 或正则表达式的精确匹配模式转换为等值索引条件。
  13. 修复 jsonpath 的多项问题:其中 @?@@ 运算符现在会对路径表达式中未定义的变量正确抛出错误。此前由于这两个运算符无法传入变量值,未定义变量会被当作 JSON null 处理而非报错,还可能引发无限制的内存消耗。
  14. 强制阻断对其他会话临时表的访问,此前该漏洞可能导致静默的错误查询结果。
  15. 修复临时表访问时的「无可用本地缓冲区」错误:当 effective_io_concurrency(有效 IO 并发度)设置过高时,单条读取流可能耗尽所有本地缓冲区。
  16. 修正自动清理处理数据库的顺序:此前按优先级从低到高处理,现已修正为从高到低。
  17. 恢复 VACUUM 事务回绕故障保护模式的设计行为,使其可以正常使用全部共享缓冲池;此前的缺陷会导致紧急清理速度大幅变慢。
  18. 修复 GiST 和 SP-GiST 索引仅扫描(index-only scan)时的索引元组解码错误,该问题可能输出损坏数据。
  19. 修复可串行化(SERIALIZABLE)隔离级别下冲突检测的竞态条件:检查初始为空的 B 树索引时可能漏检冲突,导致冲突事务同时提交,破坏事务可串行性。
  20. 修复表可见性映射中位清除操作的 WAL 日志记录逻辑:该问题可能导致增量备份出错,或无法修正页撕裂(torn-page)写入。
  21. 修复空预备事务的逻辑解码问题:无可解码变更的预备事务,可能在未发送 PREPARE 指令的情况下,直接向输出插件发送 COMMIT PREPAREDROLLBACK PREPARED,导致内置订阅端的复制中断。
  22. 修复 libpq 的多项问题:包括确保读取数据时排空 SSL 或 GSS 解密缓冲区中的所有待处理字节,避免客户端等待已到达的数据。
  23. 修复 pg_createsubscriber 执行失败后的清理逻辑,确保会清理发布端遗留的对象(包括复制槽)。
  24. 修复 pg_restore 结合 --statistics / --statistics-only 与其他选择性恢复选项(如 --schema)时的行为,使其恢复结果与 pg_dump 逻辑一致。

本次发布同时更新了时区数据库至 tzdata 2026c 版本:

  • 加拿大阿尔伯塔省(时区 America/Edmonton)自 2026 年 11 月起全年采用 UTC-06(即永久夏令时),本次更新假定其时区缩写此后统一为 CST(后续可能调整)。
  • 摩洛哥(时区 Africa/Casablanca)将于 2026 年 9 月 20 日起永久采用 UTC+00,不再执行夏令时切换。

更新说明

所有 PostgreSQL 小版本更新均为累积更新。和常规小版本升级一致,应用本次更新无需转储重载数据库,也不需要使用 pg_upgrade;只需停止 PostgreSQL 服务,替换二进制文件后重启即可。

GIN 索引表检查

如果您的业务表带有 GIN 索引,建议更新后校验 reltuples 取值。此前并行 GIN 索引构建的缺陷可能导致 reltuples 被写入无效值,进而导致自动清理和自动分析永远跳过该表。

可使用以下 SQL 查询所有带 GIN 索引的表及其当前 reltuples 值:

SELECT DISTINCT t.oid::regclass, t.reltuples
FROM pg_class t
JOIN pg_index i ON t.oid = i.indrelid
JOIN pg_class ic ON i.indexrelid = ic.oid
WHERE t.relhasindex AND ic.relam = 2742;

对于 reltuples 取值异常的表,对其执行一次 ANALYZE(或新建一个索引)即可重置该值。

btree_gist 索引重建

如果您使用 btree_gist 扩展,请重建以下两类索引:

  1. 可能包含 NaN 值的 float4 / float8 列上的 btree_gist 索引
  2. bit / bit varying 列上的 btree_gist 索引

示例命令:

REINDEX INDEX your_index_name;

ltree 索引重建

如果您使用 ltree 扩展,且 ltree 列上的 B 树索引包含极多标签(约 14653 个以上),请重建这些索引(可能已存在损坏),示例命令同上。

跳过了多个历史小版本的用户,可能需要执行额外的更新后操作,详情请查阅对应历史版本的发布说明。

更多细节请参考官方版本说明。

PostgreSQL 19 Beta 3 说明

本次发布是 PostgreSQL 19 的第三个公开测试版本。

秉承 PostgreSQL 开源社区的协作精神,我们强烈呼吁大家在测试环境中验证 PostgreSQL 19 的各项新功能,协助我们排查缺陷与兼容性问题。我们不建议在生产环境中运行 PostgreSQL 19 Beta 3,但鼓励您使用典型的业务工作负载对该测试版进行充分验证。

您的测试与反馈,是保障 PostgreSQL 19 延续稳定可靠标准、持续打造全球最先进开源关系型数据库的关键。您可以访问官方页面了解 Beta 测试流程与参与方式:

https://www.postgresql.org/developer/beta/

升级到 PostgreSQL 19 Beta 3

从旧版本 PostgreSQL 升级至 19 Beta 3,需要采用与主版本间升级一致的方案(如 pg_upgradepg_dump/pg_restore)。更多信息请参考官方升级文档。

Beta 2 以来的主要变更

PostgreSQL 19 Beta 3 的修复与调整包括:

  • 回退了 GROUP BY ALL 特性
  • 修复了新增 FOR PORTION OF 时态表语法的多项问题
  • 修复了新增逻辑复制序列同步功能的多项问题,包括 REFRESH SEQUENCES 相关的竞态条件
  • 修复了并发激活逻辑解码时可能出现的「意外的逻辑解码状态变更」错误
  • 修复了订阅对象所有权变更的相关问题
  • 修复了 postgres_fdw 下推带隐式类型转换的数组比较(如 field = ANY($1))时返回错误结果的问题
  • 修复了涉及可空唯一约束的外键检查时的崩溃问题
  • 修复了 pg_plan_advice 对数值字面量中下划线的解析错误
  • 修复了解析 JSON_ARRAY(query) 时缺失 FORMAT 子句的问题

完整的新增与变更特性清单请查阅官方版本说明:

https://www.postgresql.org/docs/19/release-19.html

Bug 与兼容性测试

PostgreSQL 每个版本的稳定性,都离不开社区用户的共同验证 —— 用您的真实工作负载和测试工具验证待发布版本,在正式版发布前发现缺陷与回归问题。当前仍处于 Beta 阶段,数据库行为、功能细节与 API 仍可能进行小幅调整。您的反馈与测试将决定新特性的最终打磨方向,也会影响正式版的发布时间,请尽早开展测试。

公开问题清单可在 PostgreSQL 维基页面查看。您可以通过官网表单提交 Bug:

https://www.postgresql.org/account/submitbug/

参考

PostgreSQL 新闻: PostgreSQL 18.6, 17.11, 16.15, 15.19, 14.24 and 19 Beta 3 Released!