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

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

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

E.6. 版本 9.6.19 #

发布日期:. 2020-08-13

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

E.6.1. 迁移到版本 9.6.19

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

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

E.6.2. 变更

  • 使 contrib 模块的安装脚本更安全(Tom Lane)

    如果攻击者能在扩展的目标模式或某个前置扩展的模式中创建对象,就可以 对扩展安装脚本发动类似 CVE-2018-1058 所述的攻击。由于扩展的安装 通常需要超级用户权限,这就开辟了一条获得超级用户权限的路径。为 降低此风险,我们更加谨慎地处理运行安装脚本所用的 search_path;在脚本内禁用 check_function_bodies;并修复部分 contrib 模块 中使用的目录调整查询以确保其安全。同时提供文档帮助第三方扩展 作者使其安装脚本安全。这不是完整的解决方案;依赖其他扩展的扩展 如果安装时不小心,仍然可能有风险。(CVE-2020-14350)

  • 修复逻辑复制 walsender 在发送 keepalive 消息之后未能发送反馈消息的 问题(Álvaro Herrera)

    在使用内置逻辑复制时这是个相对次要的问题,因为内置 walreceiver 本来 就会相当频繁地发送反馈应答(从而清除错误状态)。但在使用 pglogical 等其他复制系统时,它会导致 显著的性能问题。

  • 修复 ts_headline() 执行缓慢的问题(Tom Lane)

    上一批小版本中加入的短语搜索修复可能导致 ts_headline() 对长文档花费不合理的时间;更糟的是,该查询在有问题的循环内不可取消。

  • 确保 repeat() 函数可以被查询取消中断(Joe Conway)

  • 修复 numeric 类型列并行聚合时对 NaN 输入的错误处理(Tom Lane)

    如果某些部分聚合工作者只遇到 NaN 而另一些只遇到 非 NaN,结果的合并是错误的,可能导致错误的总体 结果(即本应为 NaN 时不是)。

  • 撤销 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_dumppg_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/pgcryptodeflate() 的误用(Tom Lane)

    由于错误处理 zlib 的 API 要求, pgp_sym_encrypt 函数可能产生错误的压缩数据。 我们没有收到过这个错误在原版 zlib 下 显现的报告,但在使用 IBM 的 zlibNX 实现 时可以看到。

  • 修复 contrib/pgcryptopgp_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 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。