E.3. 版本 9.6.6

E.3.1. 迁移到版本 9.6.6
E.3.2. 修改列表

发布日期: 2017-11-09

这个版本包含来自9.6.5的各种修补程序。关于9.6主版本的新特性信息, 请查阅第 E.9 节

E.3.1. 迁移到版本 9.6.6

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

不过,如果您使用BRIN索引,请参阅下面的第四条修改记录。

另外,如果您是从9.6.4之前的版本升级,请查阅第 E.5 节

E.3.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这样的错误。

  • 修复从SPI使用函数调用逻辑解码时崩溃,特别是用PL语言编写的任何函数 (Tom Lane)

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

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

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

  • 修复json_build_array()json_build_object()和它们的jsonb 等效函数以正确的处理显式的VARIADIC参数 (Michael Paquier)

  • 正确拒绝尝试将无限浮点值转换为numeric类型 (Tom Lane, KaiGai Kohei)

    以前的行为是依赖于平台的。

  • 修复列已经添加到视图末尾时极端情况下的崩溃 (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亿次事务, 它开始错过来自并发提交事务的一些通知。

  • 当DSM内存请求超出tmpfs中可用的空间时, 避免在Linux上发生SIGBUS崩溃 (Thomas Munro)

  • 降低大容量文件拷贝期间数据刷新请求的频率,以避免macOS出现性能问题, 特别是使用新的APFS文件系统 (Tom Lane)

  • 防止处理嵌套触发器时出现低概率崩溃 (Tom Lane)

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

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

  • COPYlo_export() 中创建文件失败时正确恢复umask设置 (Peter Eisentraut)

  • ANALYZE中为重复的列名提供更好的错误消息 (Nathan Bossart)

  • GetCommandLogLevel()中添加缺失的情况, 防止当log_statement设置为ddl 时使用某些SQL命令时的错误 (Michael Paquier)

  • 修复在非换行符终止的pg_hba.conf 文件中最后一行的错误解析 (Tom Lane)

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

  • 修复pg_dump 以确保它以有效的顺序发出GRANT命令 (Stephen Frost)

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

    这在Windows上特别有用。

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

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

  • 修复libpq来防止PGresult 的行数中的整数溢出 (Michael Paquier)

  • 修复ecpg 用指针或数组变量处理超出范围的游标声明 (Michael Meskes)

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

  • 按照预期,使ecpglib的Informix兼容性模式忽略整数输入字符串中的小数位数 (Gao Zengqi, Michael Meskes)

  • 修复ecpg的回归测试以在Windows上可靠地工作 (Christian Ullrich, Michael Meskes)

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

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

  • 将我们的时区库副本与IANA发行版tzcode2017c同步 (Tom Lane)

    这解决了各种问题;唯一可能是用户可见的是, 如果时区数据目录中没有posixrules文件, 则POSIX样式的区域名称的默认DST规则现在与当前的美国法律相符, 而不是与十几年前的相符。

  • 将时区数据文件更新为tzdata版本2017c, 用于斐济、纳米比亚、北塞浦路斯、苏丹、汤加和土耳其 & 凯科斯群岛的DST法律变更, 加上阿拉斯加、阿皮亚、缅甸、加尔各答、底特律、爱尔兰、 纳米比亚和帕果帕果的历史更正。