pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
发布日期:. 2020-08-13
此版本包含自 9.5.22 以来的多种修复。 有关 9.5 大版本中新特性的信息,参见 第 E.26 节。
PostgreSQL 社区将于 2021 年 2 月停止对 9.5.X 版本系列的更新。建议用户尽快更新到较新的版本分支。
使 contrib 模块的安装脚本更安全(Tom Lane)
如果攻击者能在扩展的目标模式或某个前置扩展的模式中创建对象,就可以 对扩展安装脚本发动类似 CVE-2018-1058 所述的攻击。由于扩展的安装 通常需要超级用户权限,这就开辟了一条获得超级用户权限的路径。为 降低此风险,我们更加谨慎地处理运行安装脚本所用的 search_path;在脚本内禁用 check_function_bodies;并修复部分 contrib 模块 中使用的目录调整查询以确保其安全。同时提供文档帮助第三方扩展 作者使其安装脚本安全。这不是完整的解决方案;依赖其他扩展的扩展 如果安装时不小心,仍然可能有风险。(CVE-2020-14350)
修复逻辑复制 walsender 在发送 keepalive 消息之后未能发送反馈消息的 问题(Álvaro Herrera)
在使用内置逻辑复制时这是个相对次要的问题,因为内置 walreceiver 本来 就会相当频繁地发送反馈应答(从而清除错误状态)。但在使用 pglogical 等其他复制系统时,它会导致 显著的性能问题。
确保 repeat() 函数可以被查询取消中断(Joe Conway)
撤销 EXPLAIN 非文本输出格式中对索引名的双重引号 (Tom Lane、Euler Taveira)
修复 ALTER TABLE 中约束重新验证的时机(David Rowley)
如果 ALTER TABLE 既需要完全重写表内容(例如因为 更改列的数据类型),又需要扫描表以重新验证外键或 CHECK 约束,它有时会以错误的顺序行事,导致诸如 “could not read block 0 in file "base/nnnnn/nnnnn": read only 0 of 8192 bytes” 之类的奇怪错误。
正确处理 FROM 子句中未展平子 SELECT 上附加的限定子句中的 LATERAL 引用(Tom Lane)
这一疏漏可能导致查询执行时的断言失败或崩溃。
避免认为从未分析过的外部表有零个元组(Tom Lane)
这主要影响规划器对 GROUP BY 将得到的分组数的估计。
改进服务器 buffile 模块中的错误处理(Thomas Munro)
修复了一些 I/O 错误与到达 EOF 无法区分、或者根本不被报告的情况。还在 适当之处添加了块号和字节数等细节。
修复 SERIALIZABLE 隔离模式下的冲突检查异常 (Peter Geoghegan)
如果一个并发插入的元组被另一个并发事务更新,而这两个元组版本对当前 事务的快照都不可见,序列化冲突检查可能就元组是否与当前事务的结果 相关得出错误结论。这可能使一个可序列化事务在不该提交时(本应报 序列化错误)成功提交。
避免重复把死 btree 索引条目标记为死(Masahiko Sawada)
虽然功能上无害,但在启用校验和或打开 wal_log_hints 时,这会导致无用的 WAL 流量。
修复某些代码路径在修改 pg_control 之前未获取正确 锁的问题(Nathan Bossart、Fujii Masao)
这一疏漏可能使 pg_control 以不一致的校验和写出, 之后可能引起麻烦,包括在下一次 pg_control 更新 之前崩溃时无法重启数据库。
修复 currtid() 和 currtid2() 中的错误(Michael Paquier)
这些函数(未写入文档且只被古老版本的 ODBC 驱动使用)包含可导致崩溃的 编码错误,或者在应用于没有存储的关系时产生诸如 “could not open file” 之类令人困惑的错误消息。
避免在持有自旋锁时调用 elog() 或 palloc()(Michael Paquier、Tom Lane)
与复制槽相关的逻辑有几处违反了这一编码规则。虽然出问题的几率很低, 但被调用函数中的错误会导致自旋锁卡死。
在 pg_dump 和 pg_basebackup 中正确报告磁盘空间不足 错误(Justin Pryzby、Tom Lane、Álvaro Herrera)
某些代码路径会产生诸如 “could not write file: Success” 之类的可笑报告。
修复同时具有表级权限和列级权限的表的并行恢复(Tom Lane)
表级权限授予必须先被应用,但并行恢复不能可靠地按此排序;这可能导致 “tuple concurrently updated” 错误,或某些列级权限授予 消失。修复方法是在归档文件中的此类条目之间包含依赖链接,这意味着 必须用修正后的 pg_dump 重新转储,以确保 问题不会复发。
确保 pg_upgrade 在目标集簇中运行时 vacuum_defer_cleanup_age 被设为零 (Bruce Momjian)
如果目标集簇的配置被修改为把 vacuum_defer_cleanup_age 设为非零值,会妨碍系统目录的冻结正常工作,导致升级以令人困惑的 方式失败。确保升级期间覆盖任何此类设置。
修复 pg_recvlogical 在退出前排空未决消息的 问题(Noah Misch)
没有这一修复,复制发送端可能检测到发送失败并在对复制槽 LSN 位置进行 预期的最终更新之前退出。这导致下次连接之后重新传输数据。还可能 错过 pg_recvlogical 想消费的最后数据之后 发送的错误消息。
修复 pg_rewind 对源数据目录中刚被删除文件 的处理(Justin Pryzby、Michael Paquier)
使用在线源数据库工作时,并发文件删除是可能的,但如果删除恰好发生在 看到文件目录项与用 stat() 检查它之间, pg_rewind 就会困惑。
让 pg_test_fsync 在 Windows 上使用二进制 I/O 模式(Michael Paquier)
此前它以文本模式写测试文件,这不能准确反映 PostgreSQL 的实际用法。
修复 contrib/dblink 未能正确初始化本地状态的 问题(Joe Conway)
在恰当的环境组合下,这可能导致 dblink_close() 发出意外的远程 COMMIT。
修复 contrib/pgcrypto 对 deflate() 的误用(Tom Lane)
由于错误处理 zlib 的 API 要求, pgp_sym_encrypt 函数可能产生错误的压缩数据。 我们没有收到过这个错误在原版 zlib 下 显现的报告,但在使用 IBM 的 zlibNX 实现 时可以看到。
修复 contrib/pgcrypto 的 pgp_sym_decrypt 函数中解压逻辑的边界情况 (Kyotaro Horiguchi、Michael Paquier)
压缩流可以合法地以空包结束,但解压器未能处理这一点,会抱怨数据损坏。
用 POSIX 标准的 strsignal() 取代 BSD 风格的 sys_siglist[](Tom Lane)
这避免了在非常新的 glibc 版本下的构建失败。
支持用 Microsoft Visual Studio 2015 或更高版本构建我们的 NLS 代码 (Juan José Santamaría Flecha、Davinder Singh、Amit Kapila)
避免源代码树之上若干层存在名为 configure 的文件时 我们的 MSVC 安装脚本可能失败的问题(Arnold Müller)
这可能干扰某些通过寻找 configure 来识别源代码树 顶层的逻辑。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。