2025年9月25日: PostgreSQL 18 发布!

PostgreSQL 15.2、14.7、13.10、12.14 和 11.19 发布!

发布于 2023-02-09,作者:PostgreSQL 全球开发组
PostgreSQL 项目 安全

PostgreSQL 全球开发组发布了所有支持的 PostgreSQL 版本的更新,包括 15.2、14.7、13.10、12.14 和 11.19。本次发布修复了一个安全漏洞,并解决了过去几个月报告的 60 多个错误。

有关更改的完整列表,请参阅 发行说明

安全问题

CVE-2022-41862:连接到已修改服务器时,使用 Kerberos 客户端内存泄露。

受影响版本:12 - 15。

已修改的、未经验证的服务器或未经验证的中间人可以在建立 Kerberos 传输加密过程中发送未终止的字符串。当 libpq 客户端应用程序具有 Kerberos 凭证缓存且未显式禁用 gssencmode 选项时,服务器会导致 libpq 读取过多,并报告一个错误消息,其中包含来自其接收缓冲区及之后的未初始化字节。如果 libpq 的调用者以某种方式使攻击者能够访问该消息,则会泄露读取过多的字节。我们尚未确认或排除导致崩溃或在泄露的字节中存在显著、机密信息的攻击的可行性。

PostgreSQL 项目感谢 Jacob Champion 报告此问题。

错误修复和改进

本次更新修复了过去几个月报告的 60 多个错误。以下列出的问题影响 PostgreSQL 15。其中一些问题也可能影响其他支持的 PostgreSQL 版本。

包含在此发布版本中

  • 修复分区表,以便在父表中不存在 GENERATED 列或子表生成的列具有不同依赖项时,正确更新子表中的 GENERATED 列。
  • MERGE 命令的几项修复。
  • 允许 WITH RECURSIVE ... CYCLE 查询访问其 SET 输出列。
  • 修复了在使用外表进行批量插入时可能导致逻辑不一致的问题,例如,BEFORE ROW 触发器可能无法处理本应可用的行。
  • 拒绝在 jsonpath 存在性检查中使用未定义的变量。
  • 修复了直接来自表中的 text 列的 jsonb 索引操作
  • 在重载时,遵循 checkpoint_completion_target 的更新值。
  • recovery_target_xid 模式下记录正确的结束时间戳。
  • 修复了在使用逻辑复制时,允许列列表长度超过 100 的问题。
  • 防止在 VACUUM 结束时发生“错误的元组长度”失败。
  • 在进行查询流水线处理时,避免在 ANALYZE 后立即提交。
  • 对查询规划器进行了多项修复,其中一项提供了更多机会使用 分区连接的备忘录
  • 修复了统计信息收集,以正确处理关系类型更改时的情况(例如,表被转换为视图)。
  • 确保 全文搜索 查询在执行短语匹配时可以被取消。
  • 修复了 DROP DATABASE 和逻辑复制工作进程之间的死锁。
  • CREATE SUBSCRIPTION 连接尝试失败时,修复了会话生命周期的少量内存泄漏。
  • 在启用了 hot_standby 的副本处理 SELECT 查询时,性能得到提升。
  • 对逻辑解码进行了多项修复,提高了其稳定性和膨胀处理能力。
  • 修复了默认的逻辑复制插件 pgoutput,使其不会发送表中未包含在复制 列列表 中的列。
  • 修复了 pg_basebackup 中非常大的表空间映射文件可能损坏的问题。
  • 删除了 pg_dump--if-exists 模式下,当 public schema 的所有者非默认时产生的无害警告。
  • 修复了 psql 命令 \sf\ef,使其能够处理具有 SQL 标准函数体(即 BEGIN ATOMIC)的 SQL 语言函数。
  • 修复了 ALTER FUNCTION/PROCEDURE/ROUTINE ... SET SCHEMA 的制表符补全。
  • 更新了 pageinspect 扩展,将其磁盘访问函数标记为 PARALLEL RESTRICTED
  • 修复了 seg 扩展,使其在输入数字超过 127 位时不会崩溃或打印乱码。

本次发布还更新了时区数据文件到 tzdata release 2022g,以应对格陵兰和墨西哥的 DST 法规变更,并对加拿大北部、哥伦比亚和新加坡进行了历史性修正。值得注意的是,一个新的时区 America/Ciudad_Juarez 已从 America/Ojinaga 中分离出来。

有关所有更改的完整列表,请参阅 发布说明

更新

所有 PostgreSQL 更新版本都是累积的。与其他次要版本一样,用户不需要转储和重新加载数据库或使用 pg_upgrade 来应用此更新版本;您可以直接关闭 PostgreSQL 并更新其二进制文件。

跳过了一个或多个更新版本的用户可能需要执行额外的、更新后的步骤;有关详细信息,请参阅早期版本的发布说明。

有关更多详细信息,请参阅 发行说明

链接