pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
发布日期:. 2017-05-11
此版本包含自 9.5.6 以来的多种修复。 有关 9.5 大版本中新特性的信息,参见 第 E.26 节。
对于运行 9.5.X 的用户,不需要转储/恢复。
不过,如果你使用的外部数据服务器依靠用户密码进行身份验证,请参见 下面第一条变更日志条目。
另外,如果你使用依赖“逻辑解码”的第三方复制工具,请参见 下面第四条变更日志条目。
另外,如果你是从 9.5.6 之前的版本升级,参见 第 E.20 节。
限制 pg_user_mappings.umoptions 的可见性,以保护存储为用户映射选项的密码 (Michael Paquier、Feike Steenbergen)
原来的编码允许外部服务器对象的所有者,或任何被他授予服务器 USAGE 权限的人,看到与该服务器关联的所有用户 映射的选项。这很可能包括其他用户的密码。调整视图定义以匹配 information_schema.user_mapping_options 的行为,即这些选项对被映射的用户可见,或者当映射针对 PUBLIC 且当前用户是服务器所有者时,或者当前 用户是超级用户时可见。(CVE-2017-7486)
此补丁本身只会修复新 initdb 的数据库中的行为。如果希望在现有数据库中 应用此更改,请遵循 第 E.18 节中 CVE-2017-7547 变更日志条目所示的更正程序。
防止通过泄漏型操作符暴露统计信息(Peter Eisentraut)
规划器的一些选择率估计函数会对从 pg_statistic 获得的值(如最常见值和直方图条目)应用用户定义操作符。这发生在 表权限检查之前,因此恶意用户可以利用这一行为获得他无权读取的表列 的这些值。为修复,当操作符的实现函数未被证明防泄漏且调用用户无 权读取所需统计信息的表列时,回退到默认估计。实践中大多数情况下 至少满足这些准则之一。(CVE-2017-7484)
恢复 libpq 对 PGREQUIRESSL 环境变量的识别 (Daniel Gustafsson)
对这个环境变量的处理在 PostgreSQL 9.3 中被 意外丢弃,但其文档还在。这造成了安全隐患,因为用户可能依赖该环境 变量强制 SSL 加密连接,但这不再有保证。恢复对该变量的处理,但其 优先级低于 PGSSLMODE,以避免破坏在 9.3 之后代码下 正常工作的配置。(CVE-2017-7485)
修复逻辑解码初始快照可能无效的问题(Petr Jelinek、Andres Freund)
为逻辑解码复制槽创建的初始快照可能不正确。这可能导致使用逻辑解码 复制不完整/不一致初始数据的第三方工具。如果创建槽时源服务器繁忙, 或者已存在另一个逻辑槽,更有可能发生。
如果你使用依赖逻辑解码的复制工具,并且它本应在复制开始时复制了非空 数据集,建议在安装此更新后重建副本,或对照源服务器验证其内容。
修复未记录索引的“init fork”可能的损坏 (Robert Haas、Michael Paquier)
这可能导致未记录索引在崩溃和重启之后被置为无效状态。这种问题将持续 到索引被删除并重建为止。
修复备库重放已预备但未提交的两阶段事务时 pg_subtrans 条目的错误重建(Tom Lane)
大多数情况下这没有可见的不良影响,但在边界情况下可能导致 pg_subtrans 中的循环引用,可能使检查两阶段 事务所修改行的查询陷入无限循环。
避免 walsender 因未能初始化字符串缓冲区而 可能的崩溃(Stas Kelvich、Fujii Masao)
修复 GiST 索引上最近邻仅索引扫描重扫描时可能的崩溃(Tom Lane)
修复 postmaster 对后台工作者进程 fork() 失败的 处理(Tom Lane)
此前 postmaster 会像进程成功启动一样更新其状态的一部分,导致后续的 混乱。
修复 GROUPING SETS 列的数据类型可哈希但不可排序时 的崩溃或错误答案(Pavan Deolasee)
避免把“物理目标列表”优化应用于自定义扫描 (Dmitry Ivanov、Tom Lane)
这一优化假定检索元组的所有列代价低廉,对普通 Postgres 元组确实如此; 但对自定义扫描提供者未必。
应用 FOR ALL 行级安全策略时使用正确的子表达式 (Stephen Frost)
某些情况下会应用 WITH CHECK 限制,而 USING 限制更合适。
确保扩展脚本中查询的解析能看到紧邻的前一条 DDL 的结果 (Julien Rouhaud、Tom Lane)
由于扩展脚本文件中命令之间缺少缓存刷新步骤,非实用查询可能看不到紧 邻的目录更改(如 ALTER TABLE ... RENAME)的 效果。
当 ALTER TABLE ... ALTER COLUMN TYPE 重建现有索引 时跳过表空间权限检查(Noah Misch)
如果调用用户当前对包含索引的表空间没有 CREATE 权限,命令就会失败。这种行为似乎无益,因此跳过检查,允许索引在原 地重建。
修复 ALTER TABLE ... VALIDATE CONSTRAINT 在约束被 标记 NO INHERIT 时不递归到子表 (Amit Langote)
此修复防止子表中不存在匹配约束时不需要的 “constraint does not exist” 失败。
避免源表上行级安全激活时 COPY ... TO 中的悬空指针 (Tom Lane)
通常这没有不良影响,但有时会导致意外错误或崩溃。
避免在 CLUSTER 和 VACUUM FULL 中访问已关闭的关系缓存条目(Tom Lane)
运气不好时,这可能导致目标关系上的索引被以错误的持久性设置重建。
修复 VACUUM 正确考虑因页 pin 冲突而无法扫描的页 (Andrew Gierth)
这往往导致低估表中的元组数。在小型高争用表的最坏情况下, VACUUM 可能错误地报告表不包含任何元组,导致 非常糟糕的计划选择。
确保哈希连接中的批量元组传输循环可被查询取消请求中断 (Tom Lane、Thomas Munro)
修复 interval 比较中的整数溢出问题 (Kyotaro Horiguchi、Tom Lane)
interval 类型的比较操作符对超过约 296000 年的间隔可能 给出错误答案。包含这种大值的列上的索引应执行 REINDEX,因为它们 可能已损坏。
修复 cursor_to_xml() 在 tableforest = false 时产生有效输出 (Thomas Munro、Peter Eisentraut)
此前它未能产生包裹的 <table> 元素。
修复 float8_timestamptz() 和 make_interval() 中的舍入问题(Tom Lane)
这些函数在把浮点值转换为整数微秒时是截断而不是舍入;这可能导致意外 的差一结果。
修复 pg_get_object_address() 正确处理操作符族的 成员(Álvaro Herrera)
改进 pg_timezone_names 视图的性能 (Tom Lane、David Rowley)
减少包含许多大块的内存上下文的内存管理开销(Tom Lane)
修复对 lseek() 和 close() 边界情况错误的草率处理(Tom Lane)
这两个系统调用在典型情况下不太可能失败,但如果失败, fd.c 会变得相当混乱。
修复对 postmaster 是否作为 Windows 服务运行的不正确检查 (Michael Paquier)
这可能导致在事件日志不可访问时尝试写入它,以至于完全不进行日志记录。
修复 ecpg 支持 COMMIT PREPARED 和 ROLLBACK PREPARED(Masahiko Sawada)
修复 ecpg 中处理美元引用字符串字面量时的 双重释放错误(Michael Meskes)
在 pg_dump 中,修复某些类型数据库对象的 注释和安全标签的模式和所有者标记错误 (Giuseppe Broccolo、Tom Lane)
简单情况下这没有不良影响;但例如,选择性模式恢复可能遗漏本应包含的 注释,因为它们没有被标记为属于其相关对象的模式。
避免 SQL 对象名包含换行时 pg_restore -l 发出无效 列表文件(Tom Lane)
用空格替换换行,这足以使输出对 pg_restore -L 的 用途有效。
修复 pg_upgrade 传输附加到“大对象” (blob)的注释和安全标签(Stephen Frost)
此前,blob 被正确传输到新数据库,但附加到它们的任何注释或安全标签都 丢失了。
改进 contrib/adminpack 的 pg_file_write() 函数中的错误处理 (Noah Misch)
值得注意的是,它未能检测 fclose() 报告的错误。
在 contrib/dblink 中,建立新的未命名连接时避免 泄漏先前的未命名连接(Joe Conway)
修复 contrib/pg_trgm 从正则表达式提取三元组 的问题(Tom Lane)
某些情况下它会产生永远无法匹配任何东西的损坏数据结构,导致使用三元 组索引的 GIN 或 GiST 索引扫描找不到与正则表达式的任何匹配。
在 contrib/postgres_fdw 中,把查询取消请求传输到 远程服务器(Michael Paquier、Etsuro Fujita)
以前,本地查询取消请求不会导致已发送的远程查询提前终止。这是对最初 为 9.6 完成的工作的回移植。
在 MSVC 构建中支持 Tcl 8.6(Álvaro Herrera)
把我们的时区库副本与 IANA tzcode2017b 同步(Tom Lane)
这修复了影响 2038 年 1 月某些夏令时转换的 bug。
更新时区数据文件到 tzdata 版本 2017b,涉及 智利、海地和蒙古的夏令时法规变更,加上厄瓜多尔、哈萨克斯坦、 利比里亚和西班牙的历史修正。南美洲、太平洋和印度洋以及一些亚洲 和中东国家的众多时区改用数字缩写。
IANA 时区数据库以前为所有时区提供文本缩写,有时编造在当地居民中 几乎或完全没有使用的缩写。他们正在逆转这一政策,改为在没有证据 表明实际使用英文缩写的区域使用数字 UTC 偏移。至少目前, PostgreSQL 将继续接受这种被移除的缩写 用于时间戳输入。但它们不会显示在 pg_timezone_names 视图中,也不用于输出。
在 MSVC 构建中对 POSIX 风格时区名使用正确的夏令时规则 (David Rowley)
Microsoft MSVC 构建脚本忽略了把 posixrules 文件 安装到时区目录树中。这导致时区代码回退到它内置的关于 POSIX 风格 时区名应假定什么 DST 行为的规则。由于历史原因,那仍然对应美国 2007 年之前使用的 DST 规则(即 4 月第一个星期日和 10 月最后一个 星期日更改)。有了此修复,POSIX 风格时区名将使用 US/Eastern 时区的当前和历史 DST 转换日期。如果 不希望这样,移除 posixrules 文件,或用其他 某个时区文件的副本替换它(见 第 8.5.3 节)。注意由于缓存,可能需要重启 服务器才能使这种更改生效。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。