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

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

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

E.4. 版本 9.6.21 #

发布日期:. 2021-02-11

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

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

E.4.1. 迁移到版本 9.6.21

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

不过,请看下面的第一条变更日志条目,它描述了升级之后可能宜对索引执行 REINDEX 的几种情况。

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

E.4.2. 变更

  • 修复 CREATE INDEX CONCURRENTLY,使其等待并发的预备 事务(Andrey Borodin)

    CREATE INDEX CONCURRENTLY 等待所有并发事务完成 以便能看到它们插入的行的那个时刻,出于同样的原因,它也必须等待 所有预备事务完成。此前没有这样做,意味着预备事务插入的行可能被 遗漏在新索引之外,导致依赖该索引的查询漏掉这些行。在启用了预备 事务的安装(max_prepared_transactions > 0)中, 如果并发构建索引时可能发生过此问题,建议对这些索引执行 REINDEX。

  • 避免对计划包含 MergeAppend 节点的游标应用 WHERE CURRENT OF 时出现错误结果(Tom Lane)

    这种情况不受支持(一般而言,使用 ORDER BY 的游标 不保证是简单可更新的);但代码此前没有拒绝它,并且可能静默地给出 假匹配。

  • 修复对计划包含自定义扫描节点的游标应用 WHERE CURRENT OF 时的崩溃(David Geier)

  • 修复规划器对在某个连接层级计算且仅在同一层级使用的占位符的处理 (Tom Lane)

    这一疏漏可能导致 failed to build any N-way joins 规划器错误。

  • 更谨慎地判断索引访问方法是否支持 mark/restore(Andrew Gierth)

    这防止了罕见边界情况下缺少支持函数的错误。

  • 修复 ALTER DEFAULT PRIVILEGES 安全处理重复参数的问题 (Michael Paquier)

    同一条命令中重复的角色或模式名可能导致 tuple already updated by self 错误或唯一约束冲突。

  • pg_authid 变化时刷新与 ACL 相关的缓存 (Noah Misch)

    这一更改确保与权限相关的决策能及时反映 ALTER ROLE ... [NO] INHERIT 的结果。

  • 防止对有歧义的 CREATE TABLE LIKE 子句的错误处理 (Tom Lane)

    LIKE 子句在新表初始创建之后会被重新检查,以处理 索引等的导入。这一重新检查有可能找到同名的另一张表,导致意外的 行为;一个例子是新表是与 LIKE 目标同名的临时表。

  • 调整 CREATE TABLE LIKE 中操作的顺序,使索引在外键 约束构建之前被克隆(Tom Lane)

    这修复了外层 CREATE TABLE 中声明的自引用外键约束 依赖于来自 LIKE 子句的索引的情况。

  • 禁止把继承子表转换为视图(Tom Lane)

  • 确保已删除关系占用的磁盘空间在提交时被及时释放(Thomas Munro)

    此前,如果被删除的关系跨越多个 1GB 段,只有第一段被立即截断。其他段 只是被解除链接,只要还有其他后端打开着这些文件,这不会让内核释放 存储。

  • 修复 COPY FROM 中反斜线转义的多字节字符的处理 (Heikki Linnakangas)

    反斜线后跟多字节字符的情况没有被正确处理。在某些客户端字符编码下, 这可能导致把多字节字符的一部分误解释为字段分隔符或复制数据结束 标记。

  • 避免不带 ANALYZEEXPLAIN 预先 分配执行器哈希表(Alexey Bashtanov)

  • 修复 LISTEN/NOTIFY 队列处理中新近 引入的竞态条件(Tom Lane)

    新监听的后端可能试图读取正在被截断的 SLRU 页,可能导致错误。

    队列尾指针可能被设置为一个不等于任何后端队列位置的值,导致队列截断 逻辑被有效禁用。继续使用 NOTIFY 随后会导致队列 填满警告,最终在服务器重启之前无法再发送任何通知。

  • 允许 jsonb 连接操作符处理 JSON 数据类型的所有组合 (Tom Lane)

    我们可以连接两个 JSON 对象或两个 JSON 数组。其他情况通过把非数组 输入包装成单元素数组再执行数组连接来处理。此前,某些输入组合遵循 此规则,另一些则任意地抛出错误。

  • 修复 BRE 模式正则表达式中解析 * 量词时使用未初始 化值的问题(Tom Lane)

    这个错误可能导致量词表现为非贪婪,即表现得像完整正则表达式中的 *? 量词那样。

  • 修复 numeric power() 指数恰为 INT_MIN (-2147483648)的情况(Dean Rasheed)

    此前会产生没有任何有效数字的结果。

  • 防止因错误检测 SLRU 日志回卷点而可能发生的的数据丢失(Noah Misch)

    回卷点通常落在页中间,必须把它舍入到页边界,而这一步没有正确完成。 除非安装已经到达距 SLRU 溢出不到一页的位置(在正常运行的系统中 不太可能),否则不会出现问题。如果真的发生,之后会表现为 apparent wraparoundcould not access status of transaction 错误。

  • 修复 walsender 进程在为逻辑解码发送新快照期间的内存泄漏(Amit Kapila)

  • 修复 walsender 在终止复制之后接受其他命令的问题(Jeff Davis)

  • 确保检测热备后端与启动(WAL 应用)进程之间的死锁(Fujii Masao)

    启动进程不运行死锁检测代码,因此在启动进程最后一个加入循环等待的 情况下,死锁可能永远不被识别。

  • 修复 recovery_target_xid 值解析中的可移植性问题 (Michael Paquier)

    目标 XID 可能有 64 位宽,但它是用 strtoul() 解析 的,在 long 为 32 位的平台(如 Windows)上导致错误 行为。

  • 避免检查带 TRANSFORM 选项的函数时 pg_get_functiondef() 的断言失败(Tom Lane)

  • psql 中,重新允许在 \connect 命令的 connection_string 参数中包含密码 (Tom Lane)

    这过去可以工作,但最近的一次 bug 修复导致密码被忽略(结果是提示输入 密码)。

  • 修复 psql\help 命令 的若干 bug(Kyotaro Horiguchi、Tom Lane)

    带两个参数词的 \help 未能只用第一个词找到命令说明, 例如 \help reset all 本应显示 RESET 的帮助但没有。此外,\help 常常在应该调用分页器时 没有调用。它还泄漏内存。

  • 修复 pg_dump 处理扩展初始权限中的 WITH GRANT OPTION(Noah Misch)

    如果扩展的脚本创建对象并以授予选项授予其权限,之后用户撤销了这些 权限,pg_dump 会为重现这种情形生成错误的 SQL。(今天几乎没有扩展这样做。)

  • pg_rewind 中,确保回卷备库服务器时所有 WAL 都被考虑到(Ian Barwick、Heikki Linnakangas)

  • 在部分客户端程序的连接失败错误消息中报告正确的数据库名 (Álvaro Herrera)

    如果数据库名是默认推断而非在命令行上给出的,pg_dumpallpgbenchoid2namevacuumlo 在连接失败之后会产生误导性的 错误消息。

  • 修复 contrib/auto_explain 中的内存泄漏(Japin Li)

    生成 EXPLAIN 输出期间消耗的内存直到当前事务结束 (对顶层语句)或外围语句结束(对嵌套语句)才被释放。在启用 log_nested_statements 时这尤其成问题。

  • contrib/postgres_fdw 中,避免删除用户映射或 外部服务器对象时泄漏到远程服务器的打开连接(Bharath Rupireddy)

    依赖于被删除用户映射或外部服务器的打开连接不再能被引用,但此前它们 仍会在本地会话期间被保留。

  • contrib/pgcrypto 中,检查 OpenSSL EVP 函数的 错误返回(Michael Paquier)

    我们并不真的预期这里会出错,但这一更改能让静态分析工具安静下来。

  • contrib/pg_trgm 的 GiST 索引支持中,避免 picksplit 恰好在两个索引项上被调用这一罕见情况下的崩溃 (Andrew Gierth、Alexander Korotkov)

  • 修复 contrib/pg_prewarmcontrib/postgres_fdw 中超时的计算错误 (Alexey Kondratov、Tom Lane)

    contrib/pg_prewarm 的 autoprewarm 父进程的主循环 把期望的睡眠时间低估了 1000 倍,导致消耗远超预期的 CPU。 在等待远程服务器的结果时,contrib/postgres_fdw 把期望的超时高估了 1000 倍(不过这个错误已被 60 秒的钳制所缓解)。

    这两个错误都源于把秒和微秒错误地转换为毫秒。引入新的 API TimestampDifferenceMilliseconds(),使将来更容易 做对。

  • 改进 configure 在 macOS 上选择 PG_SYSROOT 的启发式(Tom Lane)

    当 Xcode 比底层操作系统更新时,新方法更可能产生理想的结果。选择与 操作系统版本不匹配的 sysroot 可能导致不可用的可执行文件。

  • 在 macOS 上构建时,在链接步骤和编译步骤中一样指定 -isysroot(James Hilliard)

    这同样改进了 Xcode 与操作系统不同步时的结果。

  • 更新时区数据文件到 tzdata 版本 2021a,涉及 俄罗斯(伏尔加格勒时区)和南苏丹的夏令时法规变更,以及澳大利亚、 巴哈马、伯利兹、百慕大、加纳、以色列、肯尼亚、尼日利亚、巴勒斯坦、 塞舌尔和瓦努阿图的历史修正。

    值得注意的是,Australia/Currie 时区已被修正到与 Australia/Hobart 相同 的程度。

提交更正

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