pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
发布日期:. 2021-08-12
此版本包含自 9.6.22 以来的多种修复。 有关 9.6 大版本中新特性的信息,参见 第 E.25 节。
PostgreSQL 社区将于 2021 年 11 月停止对 9.6.X 版本系列的更新。建议用户尽快更新到较新的版本分支。
更彻底地禁止 SSL 重协商(Michael Paquier)
SSL 重协商已被禁用一段时间了,但服务器仍会配合客户端发起的重协商 请求。一个恶意构造的重协商请求可能导致服务器崩溃(见 OpenSSL 问题 CVE-2021-3449)。在允许这么做的 OpenSSL 版本(1.1.0h 及更新)上 彻底禁用该特性。
拒绝 SELECT ... GROUP BY GROUPING SETS (()) FOR UPDATE (Tom Lane)
这与带普通 GROUP BY 的 FOR 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/DROP 与 DROP EXTENSION 并发发生,会导致崩溃或目录条目 损坏。
避免 REFRESH MATERIALIZED VIEW CONCURRENTLY 生成 的查询中的别名冲突(Tom Lane、Bharath Rupireddy)
此命令在物化视图包含某些名称的列(特别是 mv 和 newdata)时会失败。
修复 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 DOMAIN 或 ALTER 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 把未指定 STRICT 的 INTO 子句当作指定了 的未初始化变量 bug(Tom Lane)
libpq 的打印函数中发生内存不足失败时不再中止进程(Tom Lane)
在 ecpg 中,允许把 numeric 值 INT_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-bin 和 install-world-bin(Andrew Dunstan)
它们分别与 world 和 install-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 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。