E.1. 版本 10.1

E.1.1. 迁移到版本 10.1
E.1.2. 修改列表

发布日期: 2017-11-09

这个版本包含自10.0以来的各种修复。关于主版本10中的新特性信息,请查看 第 E.2 节

E.1.1. 迁移到版本 10.1

运行10.X版本的用户不需要转储/恢复。

不过,如果你使用了BRIN索引,请查看下列第四条修改日志。

E.1.2. 修改列表

  • 确保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子句中指定的结果行类型, 不检查是否匹配提供的元组值的实际行类型。如果不匹配, 通常会导致崩溃,甚至可能会暴露服务器内存的内容。 (CVE-2017-15098)

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

    以前,postmaster日志文件是以root用户身份运行的。因此, 数据库所有者可以通过将$PGLOG 作为其他文件的符号链接来挂载针对另一个系统用户的攻击, 然后通过追加日志消息将其损坏。

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

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

    以前,竞争条件允许从索引中省略一些表行。 可能有必要重新索引现有的BRIN索引以恢复过去发生的这个问题。

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

    这些竞争条件可能会导致像invalid index offnuminconsistent range map这样的错误。

  • 在复制UPDATE时防止逻辑复制将非复制列设置为空 (Petr Jelinek)

  • 修复逻辑复制以在需要时触发BEFORE ROW DELETE (Masahiko Sawada)

    以前,除非表中还有一个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的工作项逻辑, 以防止可能的崩溃和工作项的无声丢失 (Álvaro Herrera)

  • 修正了列已被添加到视图的末尾情况下的崩溃 (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亿个事务, 它就会开始错过来自并发提交事务的一些通知。

  • 在减少批文件拷贝期间数据刷新请求的频率,以避免macOS上的性能问题, 尤其是其新的APFS文件系统 (Tom Lane)

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

    这种情况是被以前的bug修复无意中破坏的。

  • 修复AggGetAggref(),返回正确的 Aggref节点来聚合已经合并了转换计算的最终函数 (Tom Lane)

  • 修复了pg_dumppsql 的一些新查询中不充分的模式限定 (Vitaly Burovoy, Tom Lane, Noah Misch)

  • 避免在psql\d 查询中使用@>操作符 (Tom Lane)

    这可以防止在安装parray_gin扩展时出现问题, 因为它定义了一个冲突的操作符。

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

    这在Windows上特别有用。

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

    在v10中,当尝试读取~/.pgpass时未能找到主目录被看做是硬错误, 但是应该只是导致未找到该文件。v10和之前的版本在读取 ~/.pg_service.conf时也是相同的错误, 尽管这样做并不明显,因为除非指定了服务名称,否则不会找到该文件。

  • 在ecpglib中,正确的处理字符串文本中的反斜杠依赖于是否设置了 standard_conforming_strings (Tsunakawa Takayuki)

  • 让ecpglib的Informix兼容性模式忽略整型输入字符串中的小数部分 (Gao Zengqi, Michael Meskes)

  • 修复了类似check Make目标缺少临时安装先决条件 (Noah Misch)

    一些非默认的测试程序,像make check一样工作, 不能确保临时安装是最新的。

  • 更新时区数据文件到tzdata版本2017c, 因为 DST 规则在 Fiji, Namibia, Northern Cyprus, Sudan, Tonga 和 Turks & Caicos Islands发生了改变,加上 Alaska, Apia, Burma, Calcutta, Detroit, Ireland, Namibia 和 Pago Pago的历史更正。

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

    由于工具链改变,10.0的用户手册页面内部锚点有小写字符串, 因此使一些外部链接打散到了网站文档中。返回到我们之前使用大写字符串的传统。