E.4. 11.5 版

发布日期: 2019-08-08

此版本包含自 11.4 起的各种修复程序。有关主要版本 11 中新功能的信息,请参阅Section E.9

E.4.1. 迁移到版本 11.5

运行 11.X 的用户不需要转储/还原。

但是,如果要从 11.1 之前的版本升级,请参见Section E.8

E.4.2. Changes

  • 使用功能强制转换语法时,要求模式限定条件强制转换为临时类型(Noah Misch)

我们长期以来都需要调用临时函数来显式指定临时模式,即pg_temp.func_name(args)。同时也需要使用功能符号转换为临时类型,例如pg_temp.type_name(arg)。否则,可以使用临时对象捕获函数调用,从而以与在 CVE-2007-2138 中阻止的方式几乎相同的方式允许特权提升。 (CVE-2019-10208)

  • 修复需要交叉类型比较的哈希子计划的执行(Tom Lane,Andreas Seltenreich)

哈希子计划使用外部查询的原始比较运算符来比较哈希表的条目。如果该运算符是交叉类型的,这是错误的事情,因为所有哈希表条目都将是子查询的输出类型。对于核心 PostgreSQL 中的一组可散列的交叉类型运算符,此错误在 64 位计算机上似乎几乎是无害的,但可能导致崩溃或在 32 位计算机上未经授权地泄露服务器内存。扩展可能会提供散列的交叉类型运算符,从而产生更大的风险。 (CVE-2019-10209)

  • 修复在一个命令中更改多个列的类型(Tom Lane)时ALTER TABLE ... ALTER COLUMN TYPE失败的问题

这修复了最新的次要发行版中引入的回归问题:使用更改的列的索引未正确处理,从而导致ALTER TABLE期间发生奇怪的错误。

  • 如果子分区中有未决的触发事件,请防止删除分区表的触发器(ÁlvaroHerrera)

这特别适用于外键约束,因为这些约束是由触发器实现的。

  • 将触发器定义从分区表复制到其中一个分区时,请包括用户指定的触发器参数(Patrick McHardy)

  • 安装依赖项以防止删除分区键列(Tom Lane)

ALTER TABLE ... DROP COLUMN将拒绝删除作为分区键列的列。但是,间接删除(例如从删除键列的数据类型而来的级联)没有这种检查,因此可以删除键列。这导致分区表严重损坏,无法访问或删除该分区表。

此修复程序添加了pg_depend个条目,这些条目强制执行以下操作:如果级联放置强制删除键列,则将删除整个分区表,而不仅仅是键列。但是,只有在创建分区表时才会创建此类条目。因此,此修补程序不会消除分区表已存在的风险。仅对于非内置数据类型的分区键列会出现此问题,因此对于大多数用户来说似乎并不构成危害。

  • 确保在分区表与其默认分区之间正确 Map 列号(Amit Langote)

如果 Map 不完全一对一,则某些操作会发生错误,例如,如果一个表中有被删除的列,而另一个表中没有被删除的列。

  • 在分区表上创建索引时忽略作为外部表的分区(ÁlvaroHerrera)

以前,在遇到外部表分区时引发了一个错误,但这是无济于事的,无法防止任何实际问题。

  • 在更多情况下修剪分区表的默认分区(即避免无用的扫描分区)(Yuzuko Hosoya)

  • 修复了当存在多个boolean类型的分区键列时,可能无法修剪分区的问题(David Rowley)

  • 当涉及的表是继承父表时,不要优化掉GROUP BY列(David Rowley)

通常,如果表的主键列包含在GROUP BY中,则可以删除任何其他分组列,因为主键列足以使组唯一。但是,如果查询也正在读取继承子表,则此规则不起作用。parent 的独特性不会扩展到孩子。

  • 避免在半联接查询中错误地使用并行哈希联接(Thomas Munro)

此错误导致来自某些EXISTS查询的重复结果行。

  • 避免对GROUPING SETS的某些查询使用不必要的排序步骤(Andrew Gierth,Richard Guo)

  • 修复计划者的索引端点探针(汤姆巷)可能出现的故障

当使用最近创建的索引来确定列的最小值或最大值时,计划者可以选择一个实际上不包含端点值的最近失效的 Tuples。在最坏的情况下,Tuples 可能包含空值,从而导致可见错误“在索引中找到意外的空值”;我们很可能最终会使用错误的值,从而降低计划估算的质量。

  • 修复了EvalPlanQual重新检查期间无法访问触发器转换表的问题(Alex Aktsipetrov)

在存在并发更新的情况下,依赖于过渡表的触发器有时会失败。

  • 修复重建外键约束时,多列外键的错误处理(Tom Lane)

如果不是键的所有列都不都是同一类型,则ALTER TABLE可能会做出关于是否需要重新验证外键的错误决定。该错误似乎总是在保守的方向上发生,即不必要地进行了重新验证。

  • 不要为继承树构建扩展统计信息(Tomas Vondra)

这样可以避免在ANALYZE期间出现“Tuples 已经被自身更新”错误。

  • 升级 Tuples 锁时避免虚 Pseudo 死锁错误(Oleksii Kliukin)

当两个或多个事务正在 await 事务 T1 释放 Tuples 级别的锁,并且 T1 将其锁升级到更高级别时,可以在 T1 完成时报告正在 await 的事务中的虚假死锁。

  • 修复无法解决涉及多个并行工作进程的死锁的问题(Rui Hai Jiang)

目前尚不清楚非人工查询是否可以解决此错误,但如果确实发生此错误,则本来可以解决的死锁所涉及的查询将阻塞直到被取消。

  • 防止使用infinity个端点对日期范围进行不正确的规范化(Laurenz Albe)

如果端点是无限的,尝试通过增加或减小端点值来将开放范围转换为封闭范围,反之亦然,这是不正确的。因此在这种情况下,请不要理会范围。

  • 修复了将非常大的money值转换为numeric(Tom Lane)时小数位数丢失的问题

  • 修复BTREE_META_CLEANUP WAL 记录的打印(Michael Paquier)

  • 防止由于版本 2 btree 元页处理不当而导致 assert 失败(Peter Geoghegan)

  • 修复 MIPS CPU 的自旋锁汇编代码,使其可在 MIPS r6(YunQiang Su)上运行

  • 确保从 PL/pgSQL 函数返回的记录或行值标记有该函数的声明复合类型(Tom Lane)

如果结果直接存储到表中,则可以避免出现问题。

  • 使 libpq 忽略连接服务文件(Tom Lane,Michael Paquier)中的回车符(\r)

在某些特殊情况下,包含 Windows 样式换行符的服务文件可能会被错误地解析,从而导致连接失败。

  • 在 psql 中,请避免在SET variable =(Tom Lane)之后提供错误的制表符完成选项

  • 修复了 psql 的\d命令(Tom Lane)中的少量内存泄漏

  • 修复 pg_dump 以确保以正确的 Sequences 转储自定义运算符类(Tom Lane)

如果用户定义的 opclass 是用户定义的范围类型的子类型,则相关对象将以错误的 Sequences 转储,从而产生不可恢复的转储。 (在其他情况下,也可能表现出无法处理 opclass 依赖项的潜在故障,但这是唯一已知的情况.)

  • 使用-R选项时修复 pgbench 中可能的锁定(Fabien Coelho)

  • 提高contrib/amcheck的索引验证的可靠性(Peter Geoghegan)

  • 修复了对contrib/jsonb_plperl中的 Perl undef值的处理(Ivan Panchenko)

  • 修复contrib/passwordcheckcheck_password_hook的其他用户共存(Michael Paquier)

  • 修复contrib/sepgsql测试以在最新的 SELinux 版本下工作(Mike Palmiotto)

  • 提高src/test/kerberossrc/test/ldap回归测试的稳定性(Thomas Munro,Tom Lane)

  • 提高src/test/recovery回归测试的稳定性(Michael Paquier)

  • 减少 pg_upgrade 的测试脚本中的 stderr 输出(Tom Lane)

  • 修复 pgbench 回归测试以在 Windows 上运行(Fabien Coelho)

  • 在构建目录位于非根 msys 挂载点(Noah Misch)的情况下,修复 TAP 测试以与 msys Perl 一起使用

  • 支持使用 Microsoft Visual Studio 2019(Haribabu Kommi)构建 Postgres

  • 在 Visual Studio 构建中,请遵守WindowsSDKVersion环境变量(如果已设置)(邱培峰)

这修复了某些配置中的构建失败。

  • 在 Visual Studio 版本中支持 OpenSSL 1.1.0 和更高版本(JuanJoséSantamaríaFlecha,Michael Paquier)

  • 在顶层调用非 GNU make 时,允许将 make 选项传递给 gmake(Thomas Munro)

  • 避免在 initdb(Tom Lane)期间选择localtimeposixrules作为TimeZone

在某些情况下,initdb 会在“真实”区域名称上选择这些人工区域名称之一。与这两个函数相比,其他任何匹配项都比 C 库的时区行为更可取。

  • 当且仅当缩写缩写时,调整pg_timezone_names视图以显示Factory时区(Tom Lane)

从历史上看,IANA 使用“ Local time zone must be set--see zic manual page”之类的“缩写”来设置此人工区域。 tzdb 数据库的现代版本改为显示-00,但是某些平台会更改数据以显示一个或另一个历史短语。仅在使用现代缩写时显示此区域。

  • 将我们的时区库副本与 IANA tzcode 版本 2019b(Tom Lane)同步

这增加了对 zic 的新-b slim选项的支持,以减小已安装区域文件的大小。我们目前尚未使用它,但将来可能会启用它。

  • 将时区数据文件更新为 tzdata 版本 2019b,以适应巴西的 DST 法律变更,以及香港,意大利和巴勒斯坦的历史更正。