选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 9.5
历史版本PostgreSQL 9.5 已于 2021 年 2 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页

E.19. 版本 9.5.7 #

发布日期:. 2017-05-11

此版本包含自 9.5.6 以来的多种修复。 有关 9.5 大版本中新特性的信息,参见 第 E.26 节

E.19.1. 迁移到版本 9.5.7

对于运行 9.5.X 的用户,不需要转储/恢复。

不过,如果你使用的外部数据服务器依靠用户密码进行身份验证,请参见 下面第一条变更日志条目。

另外,如果你使用依赖逻辑解码的第三方复制工具,请参见 下面第四条变更日志条目。

另外,如果你是从 9.5.6 之前的版本升级,参见 第 E.20 节

E.19.2. 变更

  • 限制 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)

  • 恢复 libpqPGREQUIRESSL 环境变量的识别 (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)

    通常这没有不良影响,但有时会导致意外错误或崩溃。

  • 避免在 CLUSTERVACUUM 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 PREPAREDROLLBACK 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/adminpackpg_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 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。