E.13.版本 10.1

发布日期: 2017-11-09

此版本包含自 10.0 起的各种修复程序。有关主要版本 10 中新功能的信息,请参阅Section E.14

E.13.1. 迁移到版本 10.1

运行 10.X 的用户不需要转储/还原。

但是,如果使用 BRIN 索引,请参阅下面的第四个更改日志条目。

E.13.2. Changes

  • 确保在所有情况下INSERT ... ON CONFLICT DO UPDATE检查表权限和 RLS 策略(Dean Rasheed)

INSERT ... ON CONFLICT DO UPDATE的更新路径需要对仲裁者索引的列具有SELECT权限,但是在由约束名称指定的仲裁者的情况下,它无法进行检查。此外,对于启用了行级安全性的表,它无法根据表的SELECT策略检查更新的行(无论如何指定仲裁索引)。 (CVE-2017-15099)

  • 修复由于json{b}_populate_recordset()中的行类型不匹配而导致的崩溃(Michael Paquier,Tom Lane)

这些函数使用FROM ... AS子句中指定的结果行类型,而不检查它是否与提供的 Tuples 值的实际行类型匹配。如果不这样做,通常也可能导致崩溃,尽管服务器内存内容的泄漏似乎也可能出现。 (CVE-2017-15098)

  • 修复示例服务器启动脚本,使其在打开$PGLOG之前变为$PGUSER(Noah Misch)

以前,postmaster 日志文件是在仍以 root 用户身份运行时打开的。因此,数据库所有者可以通过将$PGLOG设置为某个其他文件的符号链接来对另一个系统用户发起攻击,然后通过附加日志消息来破坏该文件。

默认情况下,这些脚本未安装在任何地方。使用它们的用户将需要手动重新复制它们,或将相同的更改应用于其修改后的版本。如果现有的$PGLOG文件是 root 所有者的文件,则需要使用正确的脚本重新启动服务器之前,将其删除或重命名。 (CVE-2017-12172)

  • 修复 BRIN 索引汇总以正确处理并发表扩展(ÁlvaroHerrera)

以前,竞争条件允许某些表行从索引中省略。可能需要重新索引现有的 BRIN 索引,以从以前出现的此问题中恢复过来。

  • 修复并发更新 BRIN 索引(Tom Lane)期间可能出现的故障

这些竞争条件可能会导致错误,例如“无效索引 offnum”或“不一致的范围图”。

  • 防止逻辑复制在复制UPDATE(Petr Jelinek)时将未复制的列设置为 null

  • 修复逻辑复制,以在预期时触发BEFORE ROW DELETE触发器(泽田正彦)

以前,除非表也具有BEFORE ROW UPDATE触发器,否则此操作不会发生。

  • 修复了从使用 SPI 的函数(尤其是任何以 PL 语言编写的函数)调用逻辑解码时崩溃的问题(Tom Lane)

  • 在目标表中查找INSERT/UPDATE/DELETE时忽略 CTE,并防止匹配模式限定的目标表名称来触发过渡表名称(Thomas Munro)

这将还原附加到 DML 命令的 CTE 的 v10 之前的行为。

  • 避免在其FILTER测试失败的行上评估聚合函数的参数表达式(Tom Lane)

这将还原 v10 之前的版本(和 SQL 标准)的行为。

  • 当多个GROUPING SETS列包含相同的简单变量(Tom Lane)时,修复错误的查询结果

  • 在评估SELECT的目标列表(Tom Lane)中的返回集合函数时,修复查询寿命内存泄漏

  • 允许并行执行带有通用计划的准备好的语句(Amit Kapila,Kuntal Ghosh)

  • 修复嵌套查询的错误并行化决策(Amit Kapila,Kuntal Ghosh)

  • 修复并行查询处理,使其在删除最近使用的角色时不会失败(Amit Kapila)

  • 修复并行执行在 BitmapOr 节点下方具有 BitmapAnd 计划节点的位图扫描时发生崩溃的问题(Dilip Kumar)

  • 修复json_build_array()json_build_object()及其等效的jsonb以正确处理显式VARIADIC参数(Michael Paquier)

  • 修复 autovacuum 的“工作项”逻辑,以防止工作项可能崩溃和无声丢失(ÁlvaroHerrera)

  • 修复了将列添加到视图末尾(Tom Lane)时的极端情况崩溃

  • 当视图或规则包含FieldSelectFieldStore表达式节点(Tom Lane)时,记录适当的依赖性

缺少这些依赖关系可能会使列或数据类型DROP在应该失败的情况下通过,从而导致以后使用视图或规则来获取错误。该修补程序不执行任何保护现有视图/规则的操作,仅用于将来创建的视图/规则。

  • 正确检测范围数据类型的哈希性(Tom Lane)

计划者错误地假定可以将任何范围类型进行哈希处理以用于哈希联接或哈希聚合,但是实际上,它必须检查范围的子类型是否具有哈希支持。这不会影响任何内置范围类型,因为它们都是可哈希的。

  • 检查功能相关性统计信息时正确忽略RelabelType个表达式节点(David Rowley)

例如,这可以正确使用varchar列的扩展统计信息。

  • 防止在有序集合聚合之间共享过渡状态(David Rowley)

这会导致内置的有序集合聚合以及用户编写的聚合崩溃。 v11 及更高版本将包含安全处理此类情况的规定,但在已发布的分支中,只需禁用优化即可。

  • 防止更早出现statement_timeout的情况下忽略idle_in_transaction_session_timeout(Lukas Fittl)

  • 修复由于 XID 环绕而导致的NOTIFY条消息的低概率丢失(Marko Tiikkaja,Tom Lane)

如果一个会话不执行任何查询,而仅侦听通知,则涉及超过 20 亿笔 Transaction,那么它将开始错过并发事务中的某些通知。

  • 减少批量文件复制期间数据刷新请求的频率,以避免在 macOS 上出现性能问题,尤其是使用其新的 APFS 文件系统(Tom Lane)时

  • 当事务隔离级别为REPEATABLE READ或更高时,允许COPYFREEZE选项起作用(Noah Misch)

先前的错误修复无意中破坏了这种情况。

  • 修复AggGetAggref()以返回正确的Aggref节点以汇总其过渡计算已合并的最终函数(Tom Lane)

  • 修复 pg_dump 和 psql 中的某些新查询中的模式资格不足(Vitaly Burovoy,Tom Lane,Noah Misch)

  • 避免在 psql 的\d查询(Tom Lane)中使用@>运算符

这样可以防止在安装 parray_ginextensions 时出现问题,因为它定义了一个冲突的运算符。

  • 修复 pg_basebackup 对表空间路径的匹配,以在比较之前对两个路径进行规范化(Michael Paquier)

这在 Windows 上特别有用。

  • 修复 libpq,不需要用户的主目录存在(Tom Lane)

在 v10 中,尝试读取~/.pgpass时未能找到主目录被视为一个硬错误,但这只会导致找不到该文件。读取~/.pg_service.conf时,v10 和先前发行版分支都犯了相同的错误,尽管这种情况不太明显,因为除非指定了服务名称,否则不会查找该文件。

  • 在 ecpglib 中,根据是否设置standard_conforming_strings正确处理字符串 Literals 中的反斜杠(Tsunakawa Takayuki)

  • 像预期的那样,使 ecpglib 的 Informix 兼容模式忽略整数 Importing 字符串中的小数位(高增琪,迈克尔·梅克斯)

  • 修复了像check这样的 Make 目标缺少的临时安装先决条件(Noah Misch)

某些旨在像make check一样工作的非默认测试过程未能确保临时安装是最新的。

  • 将时区数据文件更新为 tzdata 版本 2017c,以解决斐济,纳米比亚,北塞浦路斯,苏丹,汤加,特克斯和凯科斯群岛的 DST 法律变更,以及对阿拉斯加,阿皮亚,缅甸,加尔各答,底特律,爱尔兰,纳米比亚和帕果帕果。

  • 在文档中,将 HTML 锚点恢复为大写字符串(Peter Eisentraut)

由于更改了工具链,因此 10.0 用户手册中的页面内锚点使用小写字符串,从而使某些外部链接中断了我们的网站文档。返回到我们以前使用大写字符串的约定。