E.5. 版本 9.4.22 #
发布日期:. 2019-05-09
本发行版包含对 9.4.21 的多项修复。有关 9.4 主版本中新功能的信息,请参见第 E.27 节。
PostgreSQL社区将于 2020 年 2 月停止发布 9.4.X 系列的更新。建议用户尽快更新到较新的版本分支。
E.5.2. 变更
修复对每个表都可被排除的继承树或分区表执行
UPDATE或DELETE时的行为(Amit Langote、Tom Lane)这类情况下,当存在
RETURNING子句时,查询没有报告正确的输出列集合;如果有应当触发的语句级触发器,它也没有触发。修复目标关系是可更新视图时带多行
VALUES的INSERT ... VALUES命令中显式DEFAULT项的处理(Amit Langote、Dean Rasheed)当可更新视图对该列没有默认值而其底层表有时,单行
INSERT ... VALUES会使用底层表的默认值。然而在多行情况下,总是使用 NULL。已纠正为与单行情况一致。修复
CREATE VIEW允许零列视图(Ashutosh Sharma)为了与允许零列表保持一致,我们应当允许这一点。由于表可以被转换为视图,即使有此限制也能创建零列视图,从而导致转储/恢复失败。
在
xmloption设为content时按 SQL:2006 及后续标准的要求接受 XML 文档作为xml类型的有效值(Chapman Flack)此前 PostgreSQL 遵循不允许这么做的 SQL:2003 定义。但这给转储/恢复带来了严重问题:没有哪个
xmloption设置能接受所有有效 XML 数据。因此切换到 2006 定义。还修改了 pg_dump,使其在恢复数据期间发出
SET xmloption = content,确保即使当前设置是document转储/恢复也能工作。改进服务器启动时对既有共享内存段是否仍在使用的检查(Noah Misch)
即使
postmaster.pid文件已被移除,postmaster 现在也更可能检测到上一个 postmaster 实例仍有活动进程。修复 GIN 索引 WAL 记录的不兼容(Alexander Korotkov)
二月份小版本中应用的一个修复对向后兼容性不够谨慎,导致那个年代的备库服务器读取前一个小版本的主库生成的 GIN 页删除 WAL 记录时出问题。
在适当的情况下容忍
fsync和sync_file_range调用的EINVAL和ENOSYS错误结果(Thomas Munro、James Sewell)此前对文件同步失败就 panic 的更改对于某些失败可预见且基本上意味着“操作不受支持”的情况显得过于偏执。
修复
FULL外连接中通向外部横向引用导致的 “failed to build anyN-way joins” 规划器失败(Tom Lane)在执行关于让泄漏型操作符看到
pg_statistic数据的规则时,检查正确用户的权限(Dean Rasheed)当底层表通过视图被访问时,在决定是否可以把泄漏型操作符应用于该表的统计数据时,考虑视图所有者的权限而不是发起查询的用户的权限。这使规划器关于哪些数据可见的规则与执行器的规则一致,避免了不必要的低劣计划。
避免回滚创建了许多表的事务时的 O(N^2) 性能问题(Tomas Vondra)
修复动态共享内存管理中的竞态条件(Thomas Munro)
这些可能导致 “dsa_area could not attach to segment” 或 “cannot unpin a segment that is not pinned” 错误。
修复热备 postmaster 收到 smart 关闭请求后可能不关闭的竞态条件(Tom Lane)
收紧对编码后的 SCRAM-SHA-256 和 MD5 口令的验证(Jonathan Katz)
开头字符正确的口令字符串可能被误认为是已正确哈希为 SCRAM-SHA-256 或 MD5 格式的口令。这种口令会被接受但之后无法使用。
修复对隐含与数据库编码不同的编码的
lc_time设置的处理(Juan José Santamaría Flecha、Tom Lane)包含非 ASCII 字符的本地化月份或日期名此前在此类区域中导致意外错误或错误输出。
禁止把
NaN用作浮点服务器参数的值(Tom Lane)重排
REINDEX处理,避免对pg_class的单个索引重建时断言失败(Andres Freund、Tom Lane)修复参数化虚拟路径的规划器断言失败(Tom Lane)
在
SnapBuildInitialSnapshot()的结果中插入正确的测试函数(Antonin Houska)没有核心代码关心这一点,但一些扩展关心。
修复 Windows 上间歇性的 “could not reattach to shared memory” 会话启动失败(Noah Misch)
这些失败的一个此前未被识别的来源是为进程默认线程池创建线程栈。安排把这种栈分配在不同的内存区域。
修复 Windows 上目录扫描中的错误检测(Konstantin Knizhnik)
诸如缺少读取目录权限之类的错误没有被正确检测或报告;代码而是静默地表现为目录为空。
修复 ecpg 中的语法问题(Tom Lane)
一个缺失的分号导致 ecpg 程序中的
SET(但不是variable= DEFAULTSET)被错误翻译,产生服务器会拒绝的语法无效输出。此外,在列出多个类型名的variableTO DEFAULTDROP TYPE或DROP DOMAIN命令中,实际上只处理了第一个类型名。修复 ecpg 处理 include 文件名时可能的缓冲区越界(Liu Huailing、Fei Wu)
避免
contrib/vacuumlo在lo_unlink()调用失败时崩溃(Tom Lane)把我们的时区库副本与 IANA tzcode 版本 2019a 同步(Tom Lane)
这更正了 zic 的一个小 bug——它在
Africa/Casablanca时区输出错误的 2440 年转换,并增加了对 zic 新-r选项的支持。更新时区数据文件到 tzdata 版本 2019a,涉及巴勒斯坦和梅特拉卡特拉的夏令时法规变更,以及以色列的历史修正。
Etc/UCT现在是指向Etc/UTC的向后兼容链接,而不再是生成缩写UCT的独立时区 ——如今 UCT 通常是笔误。PostgreSQL 仍然接受UCT作为输入时区缩写,但不会输出它。