E.5. 版本 9.3.21 #
发行日期:. 2018-02-08
本次发布包含对 9.3.20 的多方面修复。有关 9.3 大版本中新特性的信息,请参见第 E.26 节。.
E.5.2. 变更
确保 pg_upgrade 创建的所有临时文件对其他用户不可读(Tom Lane、Noah Misch)
pg_upgrade 通常将其临时文件限制为只有调用用户可读写。但如果用户的
umask设置允许,包含pg_dumpall -g输出的临时文件会是组可读或全局可读,甚至可写。在多用户机器的典型用法中,umask和/或工作目录的权限会足够严格以防止问题;但可能有人在 pg_upgrade 的这一疏漏允许向不友好者泄露数据库密码的场景下使用它。(CVE-2018-1053)修复对在键共享锁定下被更新的元组的清理(Andres Freund、[Aacute]lvaro Herrera)
某些情况下,
VACUUM即使这些元组现在已经死亡也不会移除它们,导致各种数据损坏场景。修复某些 LSN 获取中不充分的缓冲区锁定(Jacob Champion、Asim Praveen、Ashwin Agrawal)
这些错误可能导致并发负载下的行为异常。潜在后果尚未完全弄清。
避免与
ALTER TABLE NO INHERIT并发地从树中移除某个子表时对继承树的查询不必要的失败(Tom Lane)修复
LATERAL子查询内VALUES内相关子SELECT的失败(Tom Lane)修复横向子查询内嵌套
UNION ALL的某些情况下 “could not devise a query plan for the given query” 规划器失败(Tom Lane)修复
has_sequence_privilege()像其他权限测试函数一样支持WITH GRANT OPTION测试(Joe Conway)在使用 UTF8 编码的数据库中,忽略断言不同编码的 XML 声明(Pavel Stehule、Noah Misch)
我们总是以数据库编码存储 XML 字符串,因此允许 libxml 对另一种编码的声明采取行动会给出错误结果。在 UTF8 之外的编码中,我们本来就不承诺支持非 ASCII XML 数据,因此为错误兼容保留以前的行为。这一更改只影响
xpath()及相关函数;其他 XML 代码路径已经这样做了。为与未来次版本协议的前向兼容做准备(Robert Haas、Badrul Chowdhury)
到目前为止,PostgreSQL 服务器只是拒绝使用比 3.0 更新的协议版本的请求,因此协议版本号的主部分和次部分之间没有功能差别。允许客户端请求 3.x 版本而不失败,发回一条表明服务器只理解 3.0 的消息。这目前没有区别,但向后移植此更改应能更快引入未来的次协议升级。
防止规划极深层嵌套集合操作(
UNION/INTERSECT/EXCEPT)时的栈溢出崩溃(Tom Lane)修复
pg_hba.conf中出现的某些类型 LDAP URL 的空指针崩溃(Thomas Munro)修复 PL/pgSQL 文档中的
INSTR()示例函数(Yugo Nagata、Tom Lane)这些函数声称与 Oracle® 兼容,但并不完全如此。特别是对负第三参数的解释有分歧:Oracle 认为负值表示目标子串可以开始出现的最后一个位置,而我们的函数把它当作目标可以结束的最后一个位置。此外,Oracle 对零或负第四参数抛出错误,而我们的函数返回零。
示例代码已被调整以更精确地匹配 Oracle 的行为。把这段代码复制到其应用中的用户可能希望更新其副本。
修复 pg_dump 使 ACL(权限)、注释和安全标签条目在归档输出格式中可靠可识别(Tom Lane)
ACL 归档条目的“标记”部分通常只是相关对象的名称。使它以对象类型开头,使 ACL 与注释和安全标签归档条目已使用的约定一致。同时修复整个数据库的注释和安全标签条目(如果存在),使其标记以
DATABASE开头,从而也遵循这一约定。这防止试图通过查看标记是否以LARGE OBJECT开头来识别大对象相关条目的代码发生假匹配。那可能导致条目被错误分类为数据而非模式,在仅模式或仅数据转储中产生不希望的结果。注意,这一更改在
pg_restore --list的输出中有用户可见的结果。在 ecpg 中,检测长度不正确的指示符数组并报错(David Rader)
避免
contrib/hstore中因对相同源和目标指针使用memcpy()而触发 libc 断言(Tomas Vondra)提供在 macOS 上自动启动 Postgres 的现代示例(Tom Lane)
contrib/start-scripts/osx中的脚本使用已被弃用十多年的基础设施,并且在过去几年的 macOS 版本中已完全不能工作。添加了包含使用较新 launchd 基础设施的脚本的新子目录contrib/start-scripts/macos。修复 Windows 上为 OpenSSL 错误选择配置特定的库(Andrew Dunstan)
支持链接到 MinGW 构建的 libperl 版本(Noah Misch)
这允许用一些常见的 Windows Perl 发行版构建 PL/Perl。
修复 MSVC 构建测试 32 位 libperl 是否需要
-D_USE_32BIT_TIME_T(Noah Misch)可用的 Perl 发行版在这点上不一致,且没有报告它的可靠手段,因此求助于对所使用的库实际行为的构建时测试。
在 Windows 上,在 postmaster 启动更早阶段安装崩溃转储处理器(Takayuki Tsunakawa)
这可以允许为一些以前不产生转储的早期启动失败收集核心转储。
在 Windows 上,避免 postmaster 启动极早期发出消息时与编码转换相关的崩溃(Takayuki Tsunakawa)
把我们现有的 Motorola 68K 自旋锁代码也用于 OpenBSD 而不只是 NetBSD(David Carlier)
为 Motorola 88K 添加自旋锁支持(David Carlier)
更新时区数据文件到 tzdata 版本 2018c,涉及巴西以及圣多美和普林西比的夏令时法规变更,加上玻利维亚、日本和南苏丹的历史修正。
US/Pacific-New时区已被移除(它本来只是America/Los_Angeles的别名)。