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

PostgreSQL 10.16 发布说明

E.8. 发布版本 10.16 #

发布日期:. 2021-02-11

本次发布包含来自 10.15 的多项修复。 有关 10 主版本新特性的说明,请参见 Section E.24.

E.8.1. 迁移到版本 10.16

对于运行 10.X 的用户,不需要执行导出/恢复。

但是,请参阅下方变更记录中的第一项,其中描述了升级后可能适合重建索引的情况。

此外,如果是从早于 10.11 的版本升级,请参见 Section E.13

E.8.2. 变更

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

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

  • 避免将 WHERE CURRENT OF 应用于计划中包含 MergeAppend 节点的游标时产生错误结果(Tom Lane)

    这种情况不受支持(一般来说,不能保证使用 ORDER BY 的游标可以简单地用于更新);但以前的代码没有拒绝它,并可能悄然给出错误匹配。

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

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

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

  • 更谨慎地判断索引访问方法是否支持标记/恢复(Andrew Gierth)

    这可以防止在罕见的边界情况下出现关于缺少支持函数的错误。

  • 调整设置,降低大量使用并行查询时耗尽 DSM 槽的可能性(Thomas Munro)

  • 修复 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 子句的索引的情况。

  • 禁止对系统目录执行 CREATE STATISTICS(Tomas Vondra)

  • 禁止将继承子表转换为视图(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 错误。

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

  • 修复 WAL 发送进程,使其在终止复制后接受其他命令(Jeff Davis)

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

    启动进程没有运行死锁检测代码,因此当启动进程最后加入循环等待时,死锁可能永远不会被识别。

  • 确保 postmaster 开始 smartfast 关闭流程时,清理尚未处理的后台工作进程请求(Tom Lane)

    以前存在一种竞争条件:如果子进程恰好在关闭前请求了后台工作进程,就可能无限期等待,导致关闭无法完成。

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

    目标 XID 可能有 64 位宽,但以前使用 strtoul() 解析,导致在 long 为 32 位的平台(例如 Windows)上行为异常。

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

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

    这以前是可以的,但最近的一项缺陷修复导致密码被忽略(从而提示用户输入密码)。

  • 修复 psql\help 命令中的多种缺陷(Kyotaro Horiguchi,Tom Lane)

    \help 带有两个参数词时,无法仅使用第一个词找到命令说明,例如 \help reset all 本应显示 RESET 的帮助,但却没有。另外,\help 经常未在应该调用分页器时调用它,也会泄漏内存。

  • pg_dump 中,确保恢复脚本以发布所有者的身份运行 ALTER PUBLICATION ADD TABLE 命令(Tom Lane)

    以前,这些命令由启动恢复脚本的角色运行;这通常能够正常工作,但在边界情况下,该角色可能没有足够权限。

  • 修复 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 父进程中的主循环,将所需睡眠时间低估为实际值的千分之一,导致 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 完全相同。