E.14. 发布版本 10.10 #
发布日期:. 2019-08-08
本次发布包含来自 10.9 的多项修复。有关 10 主版本新特性的说明,请参见第 E.24 节。
E.14.2. 变更
使用函数式类型转换语法转换为临时类型时,要求使用模式限定(Noah Misch)
我们早已要求调用临时函数时显式指定临时模式,即
pg_temp.。现在也要求在使用函数记法转换为临时类型时这样做,例如func_name(args)pg_temp.。否则,就可能利用临时对象截获函数调用,从而以与我们在 CVE-2007-2138 中阻止的方式基本相同的方式提升权限。(CVE-2019-10208)type_name(arg)修复在一条命令中更改多列类型时
ALTER TABLE ... ALTER COLUMN TYPE发生的失败(Tom Lane)这修复了最近的小版本引入的回归问题:使用被修改列的索引未得到正确处理,导致
ALTER TABLE期间出现异常失败。建立依赖关系以防止删除分区键列(Tom Lane)
ALTER TABLE ... DROP COLUMN会拒绝删除分区键列。但间接删除(例如删除键列的数据类型所引发的级联删除)没有这样的检查,因此可能删除键列。这会使分区表严重损坏,既无法访问也无法删除。此修复添加了
pg_depend条目,确保如果级联删除迫使键列被移除,将删除整个分区表,而非仅删除键列。不过,这些条目仅在创建分区表时生成,因此此修复无法消除现有分区表的风险。此问题只会发生在分区键列使用非内置数据类型的情况下,所以对大多数用户似乎没有威胁。当涉及的表是继承父表时,不要通过优化移除
GROUP BY列(David Rowley)通常,如果表的主键列包含在
GROUP BY中,就可以安全地移除其他分组列,因为主键列足以使各组唯一。但如果查询还读取继承子表,这条规则就不成立:父表的唯一性并不延伸到子表。避免在某些带有
GROUPING SETS的查询中使用不必要的排序步骤(Andrew Gierth,Richard Guo)修复
EvalPlanQual复检期间无法访问触发器过渡表的问题(Alex Aktsipetrov)在存在并发更新时,依赖过渡表的触发器有时会失败。
修复重建外键约束时对多列外键的不正确处理(Tom Lane)
如果外键的各列类型不完全相同,
ALTER TABLE可能错误判断是否需要重新验证外键。这种错误似乎总会偏向保守方向,即进行不必要的重新验证。不再为继承树构建扩展统计信息(Tomas Vondra)
这避免了
ANALYZE期间发生“tuple already updated by self”错误。避免升级元组锁时出现虚假的死锁错误(Oleksii Kliukin)
当两个或更多事务正在等待事务 T1 释放元组级锁,而 T1 又将锁升级到更高的级别时,T1 结束时可能会报告这些等待事务之间存在虚假的死锁。
修复无法解除涉及多个并行工作进程的死锁的问题(Rui Hai Jiang)
尚不清楚非人为构造的查询能否触发此缺陷,但如果发生,参与本可解除的死锁的查询会一直阻塞,直到被取消。
防止对端点为
infinity的日期范围进行不正确的规范化(Laurenz Albe)如果端点为无穷大,通过递增或递减端点值将开区间转换为闭区间(或反过来)是不正确的,因此在这种情况下保持范围原样。
修复将非常大的
money值转换为numeric时小数位丢失的问题(Tom Lane)修复 MIPS CPU 的自旋锁汇编代码,使其适用于 MIPS r6(YunQiang Su)
使 libpq 忽略连接服务文件中的回车符(
\r)(Tom Lane,Michael Paquier)在某些边界情况下,包含 Windows 风格换行符的服务文件可能被错误解析,导致连接失败。
在 psql 中,避免在
SET之后提供不正确的 Tab 补全选项(Tom Lane)variable=修复 psql 的
\d命令中少量的内存泄漏(Tom Lane)修复 pg_dump,以确保按正确顺序转储自定义操作符类(Tom Lane)
如果用户定义的操作符类是用户定义范围类型的子类型操作符类,相关对象会按错误顺序转储,产生无法恢复的转储。(底层对操作符类依赖关系的处理缺陷也可能在其他情况下出现,但这是唯一已知的情况。)
修复使用
-R选项时 pgbench 可能卡死的问题(Fabien Coelho)修复
contrib/passwordcheck,使其能与check_password_hook的其他使用者共存(Michael Paquier)修复
contrib/sepgsql测试,使其适用于近期的 SELinux 版本(Mike Palmiotto)提高
src/test/recovery回归测试的稳定性(Michael Paquier)减少 pg_upgrade 测试脚本的 stderr 输出(Tom Lane)
修复构建目录位于非根 msys 挂载点时 TAP 测试在 msys Perl 下的运行(Noah Misch)
支持使用 Microsoft Visual Studio 2019 构建 Postgres(Haribabu Kommi)
在 Visual Studio 构建中,如果设置了
WindowsSDKVersion环境变量,则遵循其设置(Peifeng Qiu)这修复了某些配置下的构建失败。
在 Visual Studio 构建中支持 OpenSSL 1.1.0 及更新版本(Juan José Santamaría Flecha,Michael Paquier)
在顶层调用非 GNU make 时,允许将 make 选项向下传递给 gmake(Thomas Munro)
在 initdb 期间,避免选择
localtime或posixrules作为TimeZone(Tom Lane)在某些情况下,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 版,以反映巴西的夏令时法规变更,并修正香港、意大利和巴勒斯坦的历史数据。