pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
发布日期:. 2021-02-11
此版本包含自 9.5.24 以来的多种修复。有关 9.5 大版本中新特性的信息,参见第 E.26 节。
这预计是 9.5.X 系列的最后一个 PostgreSQL 版本。建议用户尽快更新到较新的版本分支。
对于运行 9.5.X 的用户,不需要转储/恢复。
不过,请看下面的第一条变更日志条目,它描述了升级之后可能宜对索引执行 REINDEX 的几种情况。
另外,如果你是从 9.5.20 之前的版本升级,参见第 E.6 节。
修复 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)
反斜线后跟多字节字符的情况没有被正确处理。在某些客户端字符编码下,这可能导致把多字节字符的一部分误解释为字段分隔符或复制数据结束标记。
避免不带 ANALYZE 的 EXPLAIN 预先分配执行器哈希表(Alexey Bashtanov)
修复 LISTEN/NOTIFY 队列处理中新近引入的竞态条件(Tom Lane)
新监听的后端可能试图读取正在被截断的 SLRU 页,可能导致错误。
队列尾指针可能被设置为一个不等于任何后端队列位置的值,导致队列截断逻辑被有效禁用。继续使用 NOTIFY 随后会导致队列填满警告,最终在服务器重启之前无法再发送任何通知。
允许 jsonb 连接操作符处理 JSON 数据类型的所有组合(Tom Lane)
我们可以连接两个 JSON 对象或两个 JSON 数组。其他情况通过把非数组输入包装成单元素数组再执行数组连接来处理。此前,某些输入组合遵循此规则,另一些则任意地抛出错误。
修复 BRE 模式正则表达式中解析 * 量词时使用未初始化值的问题(Tom Lane)
这个错误可能导致量词表现为非贪婪,即表现得像完整正则表达式中的
*? 量词那样。
防止因错误检测 SLRU 日志回卷点而可能发生的的数据丢失(Noah Misch)
回卷点通常落在页中间,必须把它舍入到页边界,而这一步没有正确完成。除非安装已经到达距 SLRU 溢出不到一页的位置(在正常运行的系统中不太可能),否则不会出现问题。如果真的发生,之后会表现为“apparent wraparound”或“could not access status of transaction”错误。
修复 walsender 进程在为逻辑解码发送新快照期间的内存泄漏(Amit Kapila)
修复 walsender 在终止复制之后接受其他命令的问题(Jeff Davis)
避免检查带 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_rewind 中,确保回卷备库服务器时所有 WAL 都被考虑到(Ian Barwick、Heikki Linnakangas)
在部分客户端程序的连接失败错误消息中报告正确的数据库名(Álvaro Herrera)
如果数据库名是默认推断而非在命令行上给出的,pg_dumpall、pgbench、oid2name 和 vacuumlo 在连接失败之后会产生误导性的错误消息。
修复 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_prewarm 和
contrib/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 报告译文问题。英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。