E.40. 版本 9.3.17

E.40.1. 迁移到版本 9.3.17
E.40.2. 修改列表

发布日期: 2017-05-11

这个版本包含9.3.16的各种修补程序。 关于9.3主版本的新特性信息,请查看第 E.57 节

E.40.1. 迁移到版本 9.3.17

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

但是,如果您使用使用用户密码进行身份验证的外部数据服务器, 请参阅下面的第一个更改日志条目。

另外,如果您从早于9.3.16的版本进行升级, 请查看第 E.41 节

E.40.2. 修改列表

  • 限制pg_user_mappings.umoptions 的可见性,以保护存储为用户映射选项的密码 (Michael Paquier, Feike Steenbergen)

    之前的编码允许外部服务器对象的所有者或已授予服务器USAGE 权限的任何人查看与该服务器关联的所有用户映射的选项。这可能包括其他用户的密码。 调整视图定义以匹配information_schema.user_mapping_options 的行为,即这些选项对被映射的用户,或者映射是针对PUBLIC 和当前用户是服务器所有者,或者当前用户是超级用户是可见的。 (CVE-2017-7486)

    就其本身而言,该修补程序将仅修复新initdb的数据库中的行为。 如果您希望在现有数据库中应用此更改, 请按照第 E.39 节中CVE-2017-7547 更改日志条目中显示的更正过程进行操作。

  • 防止泄密操作员暴露统计信息 (Peter Eisentraut)

    规划器中的一些选择性估计函数将用户定义的运算符应用于从pg_statistic 获取的值,例如最常见的值和直方图条目。在检查表权限之前会发生这种情况, 因此恶意用户可以利用此行为为他没有权限阅读的表列获取这些值。 要修复,如果操作员的实现函数没有经过认证,并且调用用户没有权限读取需要统计的表列, 则回退到默认估计值。在大多数情况下,实际上至少会满足这些标准中的一个。 (CVE-2017-7484)

  • 恢复libpqPGREQUIRESSL 环境变量的识别 (Daniel Gustafsson)

    这个环境变量的处理在PostgreSQL 9.3中被偶然删除了, 但是它的文档依然存在。这会造成安全隐患, 因为用户可能依赖环境变量来强制进行SSL加密连接,但这不再有保证。 恢复变量的处理,但给它比PGSSLMODE更低的优先级, 以避免破坏可以在9.3版之后代码中正常工作的配置。 (CVE-2017-7485)

  • 修复未记录索引的init forks可能的损坏 (Robert Haas, Michael Paquier)

    这可能会导致崩溃并重新启动后,将未记录的索引设置为无效状态。 这样的问题会持续下去,直到索引被删除和重建。

  • 当备用服务器重放已准备好但未提交的两阶段事务时, 修复pg_subtrans条目的不正确重构 (Tom Lane)

    在大多数情况下,这看起来没有可见的不良影响,但在极端情况下, 它可能导致pg_subtrans中的循环引用, 这可能会导致检查由两阶段事务修改的行的查询中的无限循环。

  • 确保解析扩展脚本中的查询可以看到前一个DDL的结果 (Julien Rouhaud, Tom Lane)

    由于缺少扩展脚本文件中的命令之间的缓存刷新步骤, 非实用程序查询可能看不到前一个目录更改的效果, 例如ALTER TABLE ... RENAME

  • ALTER TABLE ... ALTER COLUMN TYPE重建现有索引时, 跳过表空间权限检查 (Noah Misch)

    如果调用用户当前对包含索引的表空间没有CREATE权限, 则该命令失败。这种行为似乎没有帮助,所以跳过检查,允许索引被重建。

  • 当约束被标记为NO INHERIT时, 修复ALTER TABLE ... VALIDATE CONSTRAINT不会递归到子表 (Amit Langote)

    当子表中不存在匹配约束时,此修补程序可防止不需要的 constraint does not exist故障。

  • 修复VACUUM以正确计算由于页面引脚冲突而无法扫描的页面 (Andrew Gierth)

    这往往导致低估表中的元组数量。在最坏的情况下,一个小型的严重争用表, VACUUM可能会错误地报告表中不包含元组, 导致非常糟糕的计划选择。

  • 确保散列连接中的批量元组传输循环可由查询取消请求中断 (Tom Lane, Thomas Munro)

  • 修复cursor_to_xml()以产生 tableforest = false的有效输出 (Thomas Munro, Peter Eisentraut)

    以前,它无法产生包含<table>元素。

  • 提高pg_timezone_names视图的性能 (Tom Lane, David Rowley)

  • 修复来自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以传输附加到大对象 (blobs) 的注释和安全标签 (Stephen Frost)

    以前,blob被正确地转移到新的数据库,但是附加到它们的任何注释或安全标签都丢失了。

  • 改善contrib/adminpackpg_file_write() 函数中的错误处理 (Noah Misch)

    值得注意的是,它未能检测到由fclose()报告的错误。

  • contrib/dblink中,当建立一个新的未命名连接时, 避免泄露之前的未命名连接 (Joe Conway)

  • 修复contrib/pg_trgm从正则表达式中提取trigram (Tom Lane)

    在某些情况下,它会产生一个无法匹配任何内容的损坏了的数据结构, 从而导致使用trigram索引的GIN或GiST索引扫描程序找不到正则表达式的任何匹配项。

  • contrib/postgres_fdw中, 向远程服务器发送查询取消请求 (Michael Paquier, Etsuro Fujita)

    以前,本地查询取消请求不会导致已发送的远程查询提前终止。 这是最初为9.6所做的工作的补丁。

  • 支持OpenSSL 1.1.0 (Heikki Linnakangas, Andreas Karlsson, Tom Lane)

    这是在较新的分支中完成的工作的补丁; 因为许多平台采用了更新的OpenSSL版本,所以需要它。

  • 支持MSVC版本中的Tcl 8.6 (Álvaro Herrera)

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

    这修正了2038年1月影响某些DST转换的错误。

  • 更新时区数据文件至tzdata release 2017b,用于智利、 海地和蒙古的DST法律变更,以及厄瓜多尔、哈萨克斯坦、利比里亚和西班牙的历史更正。 切换到南美洲、太平洋和印度洋以及一些亚洲和中东国家众多时区的数字缩写。

    IANA时区数据库以前为所有时区提供了文本缩写,有时会提供当地人口中流通很少或没有流通的缩写。 他们正在推翻该政策,赞成在真实世界中没有使用英文缩写的地区使用数字UTC偏移量。 至少目前,PostgreSQL将继续接受这种删除的时间戳输入缩写。 但是它们不会显示在pg_timezone_names视图中,也不会用于输出。

  • 在MSVC版本中为POSIX风格的时区名称使用正确的夏时制规则 (David Rowley)

    Microsoft MSVC构建脚本忽略在时区目录树中安装posixrules文件。 这导致时区代码回落到其内置规则,即关于为POSIX样式的时区名称假设哪些DST行为。 由于历史原因,这仍然对应于2007年之前美国使用的DST规则(即, 在四月的第一个星期日和十月的上个星期天进行更改)。通过此修复, POSIX样式的区域名称将使用US/Eastern区域的当前和历史DST转换日期。 如果你不想这样做,请删除posixrules文件, 或将其替换为其他区域文件的副本(请参阅第 8.5.3 节)。 请注意,由于缓存,您可能需要重新启动服务器才能使这些更改生效。