On this page
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
中的 Perlundef
值的处理(Ivan Panchenko)修复
contrib/passwordcheck
与check_password_hook
的其他用户共存(Michael Paquier)修复
contrib/sepgsql
测试以在最新的 SELinux 版本下工作(Mike Palmiotto)提高
src/test/kerberos
和src/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)期间选择
localtime
或posixrules
作为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 法律变更,以及香港,意大利和巴勒斯坦的历史更正。