发布日期:. 2017-11-09
本次发布包含来自 10.0 的多项修复。 有关 10 主版本新特性的说明,请参见 Section E.24.
对于运行 10.X 的用户,不需要执行导出/恢复。
但是,如果使用了 BRIN 索引,请参阅下方第四条变更日志。
确保 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 offnum” 或 “inconsistent range map” 等错误。
防止逻辑复制在复制 UPDATE 时将未复制的列设为空值(Petr Jelinek)
修复逻辑复制,使其按预期触发 BEFORE ROW DELETE 触发器(Masahiko Sawada)
以前,除非表还具有 BEFORE ROW UPDATE 触发器,否则不会触发。
修复从使用 SPI 的函数(尤其是用 PL 语言编写的任何函数)调用逻辑解码时的崩溃(Tom Lane)
查找 INSERT/UPDATE/DELETE 的目标表时忽略 CTE,并防止将带模式限定的目标表名与触发器过渡表名匹配(Thomas Munro)
这恢复了 v10 之前附加到 DML 命令的 CTE 的行为。
避免在聚合函数的 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)
修复自动清理的“工作项”逻辑,防止可能的崩溃和工作项静默丢失(Álvaro Herrera)
修复在视图末尾添加列时的极端情况崩溃 (Tom Lane)
当视图或规则包含 FieldSelect 或 FieldStore 表达式节点时,记录正确的依赖关系(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 或更高时使用 COPY 的 FREEZE 选项(Noah Misch)
之前的一项缺陷修复意外破坏了这种用法。
修复 AggGetAggref(),使其向转换计算已合并的聚合的最终函数返回正确的 Aggref 节点(Tom Lane)
修复 pg_dump 和 psql 中某些新查询的模式限定不充分的问题(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 目标缺少 temp-install 前置依赖的问题(Noah Misch)
某些本应像 make check 一样工作的非默认测试过程,未能确保临时安装是最新的。
将时区数据文件更新到 tzdata 2017c 版,以反映斐济、纳米比亚、北塞浦路斯、苏丹、汤加和特克斯 & 凯科斯群岛的夏令时法规变更,并修正阿拉斯加、阿皮亚、缅甸、加尔各答、底特律、爱尔兰、纳米比亚和帕果帕果的历史数据。
在文档中,恢复使用大写字符串作为 HTML 锚点(Peter Eisentraut)
由于工具链变更,10.0 用户手册的页内锚点使用了小写字符串,导致某些指向我们网站文档的外部链接失效。现在恢复了以前使用大写字符串的惯例。