选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 9.6
历史版本PostgreSQL 9.6 已于 2021 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页

E.2. 版本 9.6.23 #

发布日期:. 2021-08-12

此版本包含自 9.6.22 以来的多种修复。 有关 9.6 大版本中新特性的信息,参见 第 E.25 节

PostgreSQL 社区将于 2021 年 11 月停止对 9.6.X 版本系列的更新。建议用户尽快更新到较新的版本分支。

E.2.1. 迁移到版本 9.6.23

对于运行 9.6.X 的用户,不需要转储/恢复。

不过,如果你是从 9.6.21 之前的版本升级,参见 第 E.4 节

E.2.2. 变更

  • 更彻底地禁止 SSL 重协商(Michael Paquier)

    SSL 重协商已被禁用一段时间了,但服务器仍会配合客户端发起的重协商 请求。一个恶意构造的重协商请求可能导致服务器崩溃(见 OpenSSL 问题 CVE-2021-3449)。在允许这么做的 OpenSSL 版本(1.1.0h 及更新)上 彻底禁用该特性。

  • 拒绝 SELECT ... GROUP BY GROUPING SETS (()) FOR UPDATE (Tom Lane)

    这与带普通 GROUP BYFOR UPDATE 被禁止一样,本应被禁止,但相应的测试未能正确处理空分组集。最终结果 是执行器中的空指针解引用。

  • 拒绝 WITH 中的查询被改写为仅 NOTIFY 的情况(Tom Lane)

    这类情况过去会崩溃。

  • numeric 乘法中,如果结果小数点后位数会超过 16383, 对其舍入而非报错(Dean Rasheed)

  • 修复把 numeric 值提升到极大幂次时的边界错误和精度丢失 (Dean Rasheed)

  • 修复 to_char() 使用 EEEE 格式 且 numeric 输入值小于 10^(-1001) 时的除零失败 (Dean Rasheed)

  • 使 pg_size_pretty(bigint) 对负值的舍入方式与正值 一致(也与 numeric 版本一致)(Dean Rasheed、 David Rowley)

  • 使 pg_filenode_relation(0, 0) 返回 NULL 而不是报错 (Justin Pryzby)

  • ALTER EXTENSION 在添加或删除成员对象时锁定扩展 (Tom Lane)

    原来的编码允许 ALTER EXTENSION ADD/DROPDROP EXTENSION 并发发生,会导致崩溃或目录条目 损坏。

  • 避免 REFRESH MATERIALIZED VIEW CONCURRENTLY 生成 的查询中的别名冲突(Tom Lane、Bharath Rupireddy)

    此命令在物化视图包含某些名称的列(特别是 mvnewdata)时会失败。

  • 修复 PREPARE TRANSACTION 对会话级与事务级锁冲突的 正确检查(Tom Lane)

    如果一个事务在同一个咨询锁 ID 值上同时持有会话级和事务级锁,它就不能 被预备。这一限制没有被完整检查,可能导致 PREPARE TRANSACTION 期间发生 PANIC。

  • 修复目标角色在 RLS 策略中被列出多于一次时 DROP OWNED BY 的错误行为(Tom Lane)

  • DROP OWNED BY 期间从 RLS 策略中移除角色时,跳过 不必要的错误测试(Tom Lane)

    值得注意的是,这修复了某些必须成为超级用户才能使用 DROP OWNED BY 的情况。

  • 允许以事务方式更新索引状态标志(Michael Paquier、Andrey Lepikhov)

    这避免了处理并非真正不可变的索引谓词时的失败。虽然这不被视为受支持的 情况,但此处使用非事务更新的原有原因早已不存在,因此不妨改掉。

  • 避免 CREATE DOMAINALTER DOMAIN 出现在缓存计划中时损坏计划缓存条目(Tom Lane)

  • postgresql.conf 中相关条目被移除时,让 pg_settings.pending_restart 显示为 true(Álvaro Herrera)

    pending_restart 能正确显示某个不重启 postmaster 就无法更改的条目被修改的情况,但不能显示该条目被完全移除的情况。

  • 修复新备库跟随新主库时的一种边界失败(Dilip Kumar、Robert Haas)

    在条件的一种狭窄组合下,备库可能最终试图跟随错误的 WAL 时间线。

  • 当 WAL 重放一条事务中止记录导致文件截断时,更新最小恢复点 (Fujii Masao)

    文件截断是不可逆的,因此在该记录之前的点停止恢复不再安全。事务提交的 相应情况多年前已修复,但这一处被遗漏了。

  • 确保备库服务器的启动进程在等待 WAL 到达期间能及时响应关闭信号 (Fujii Masao、Soumyadeep Chakraborty)

  • 加锁以避免在另一进程并发写入时读到不正确的 relmapper 数据 (Heikki Linnakangas)

  • 修复推测插入的逻辑解码中的错误情况和内存泄漏(Dilip Kumar)

  • 修复 CREATE TABLE ... AS EXECUTE 某些错误情况下 的计划缓存引用泄漏(Tom Lane)

  • 修复释放 BackgroundWorkerSlots 时可能的竞态条件(Tom Lane)

    这很可能没有修复 Intel 硬件上任何可观察的 bug,但内存排序规则较弱 的机器可能出现问题。

  • 修复排序代码中的潜在崩溃(Ronan Dunklau)

    有一条代码路径可能试图释放空指针。这种情况在核心服务器对排序的使用 中似乎无法达到,但扩展或许能触发它。

  • 防止 SP-GiST 索引插入中的无限循环(Tom Lane)

    如果 INCLUDE 列占用足够多的空间以致叶子索引元组永远放不进一个页, text_ops 操作符类就会陷入徒劳地试图放下元组的无限循环。虽然 v11 之前的版本没有 INCLUDE 列,还是把这个防循环修复向后移植过来, 因为它似乎是对操作符类 bug 的良好防御。

  • 确保 SP-GiST 索引插入可以被查询取消请求终止(Tom Lane、 Álvaro Herrera)

  • 修复可能导致 PL/pgSQL 把未指定 STRICTINTO 子句当作指定了 的未初始化变量 bug(Tom Lane)

  • libpq 的打印函数中发生内存不足失败时不再中止进程(Tom Lane)

  • ecpg 中,允许把 numericINT_MIN(通常为 -2147483648)转换为整数 (John Naylor)

  • psql 及其他客户端程序中,处理非法编码 数据时避免越过字符串末尾(Tom Lane)

    字符串末尾附近一个编码不正确的多字节字符,可能导致各种处理循环越过 字符串的结束 NUL 运行,后果从无可察觉的问题到程序崩溃不等,取决于 后面的内存中碰巧有什么。这让人想起 CVE-2006-2313,不过这些特定 情况似乎没有值得注意的安全后果。

  • 避免在不同时区创建的归档文件上运行 pg_restore 时出现的 invalid creation date in header 警告 (Tom Lane)

  • pg_upgrade 保留旧安装的 oldestXID 值(Bertrand Drouvot)

    此前,新安装的 oldestXID 会被设置为一个足够老的值, (通常)会立即触发防回卷自动清理。从性能角度看这不可取;更糟的是, 使用较大 autovacuum_freeze_max_age 值的安装可能 在升级后不久遭遇不必要的强制停机。

  • 扩展 pg_upgrade 以检测并警告应升级的扩展 (Bruce Momjian)

    现在会生成一个脚本文件,其中包含把扩展升级到新安装中视为默认版本 所需的 ALTER EXTENSION UPDATE 命令。

  • contrib/postgres_fdw 中,避免出错后尝试目录 查找(Tom Lane)

    虽然这通常能工作,但不太安全,因为错误可能已使目录访问失效。此修复的 一个副作用是,有关数据转换错误的消息现在会提及查询的表和列别名 (如果使用了),而不是外部表或列的真实底层名称。

  • contrib/pgcrypto 中,避免与 OpenSSL 的符号名 冲突(Tom Lane)

    使用 SHA224 哈希的操作在 valgrind 检查下可能显示失败。看起来这只是 对齐填充字节的踩踏,因此没有实际后果,但为了保险起见予以修复。

  • 改进隔离测试基础设施(Tom Lane、Michael Paquier)

    允许为隔离测试步骤标注预期的完成顺序。这使得原本有竞态的测试用例 能获得稳定结果,而无需我们此前用来抵御竞态条件的长延迟(那并不 完全成功)。允许非带引号标识符作为隔离测试会话/步骤名(此前所有 此类名称都必须加双引号)。检测并警告隔离测试中未使用的步骤。改进 隔离测试中查询结果的显示。移除 isolationtester 的 dry-run 模式。移除 isolationtester 自身的内存泄漏。

  • 降低缓存踩踏测试的开销(Tom Lane)

  • 修复 PL/Python 回归测试在 Python 3.10 下 通过的问题(Honza Horak)

  • 使 printf("%s", NULL) 打印 (null) 而不是崩溃(Tom Lane)

    这改善了边界情况下服务器的健壮性,并使我们的 printf 实现与常见库保持一致。

  • 修复时间点恢复在 ROLLBACK PREPARED 记录处停止时 错误的日志消息(Simon Riggs)

  • 澄清涉及非负值的错误消息(Bharath Rupireddy)

  • 修复 configure 在 OpenLDAP 2.5 下的工作, 该版本不再有单独的 libldap_r 库 (Adrian Ho、Tom Lane)

    如果没有 libldap_r 库,我们现在静默假定 libldap 是线程安全的。

  • 添加新的 make 目标 world-bininstall-world-bin(Andrew Dunstan)

    它们分别与 worldinstall-world 相同,只是不构建或安装文档。

  • 修复 TAP 测试的 make 规则(prove_installcheck)在 PGXS 用法下工作的问题(Andrew Dunstan)

  • 避免假定 GSSAPI 库返回的字符串以空字符结尾(Tom Lane)

    GSSAPI 规范提供字符串指针和长度。实践中字符串后面的下一个字节通常是 零,因此我们原来的编码实际并没有失败;但确实有 AddressSanitizer 报告的记录。

  • 允许在 MSVC 上以 GSSAPI 构建(Michael Paquier)

    修复与现代 Kerberos 构建的各种不兼容。

  • 在 MSVC 构建中,如果指定过 --with-pgport,把它包含在 pg_config 报告的 configure 选项集合中 (Andrew Dunstan)

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。