E.5.版本 10.9

发布日期: 2019-06-20

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

E.5.1. 迁移到版本 10.9

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

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

E.5.2. Changes

  • 修复 SCRAM 验证程序解析中的缓冲区溢出危险(乔纳森·卡茨,海基·林纳坎加斯,迈克尔·帕奎尔)

任何经过身份验证的用户都可以通过将自己的密码更改为特定的值来导致基于堆栈的缓冲区溢出。除了可以使 PostgreSQL 服务器崩溃之外,这还可以作为 PostgreSQLos 帐户执行任意代码。

libpq 中也存在类似的溢出危险,这可能使流氓服务器使 Client 端崩溃,或者可能以 Client 端的 os 帐户身份执行任意代码。

PostgreSQL 项目感谢 Alexander Lakhin 报告此问题。 (CVE-2019-10164)

  • 当表具有部分排除约束时(Tom Lane)修复ALTER TABLE ... ALTER COLUMN TYPE失败

  • 修复COMMENT命令无法对域约束进行 Comments 的问题(Daniel Gustafsson,Michael Paquier)

  • 当哈希聚合的哈希键列表中存在重复的列时,防止可能的内存破坏(Andrew Gierth)

  • 修复合并合并计划生成错误(Tom Lane)

此错误可能导致“找不到要排序的 pathkey 项”错误。

  • 修复不正确打印具有重复联接名称的查询(PhilipDubé)

这种疏忽导致包含此类查询的视图的转储/还原失败。

  • 修复了json_to_record()json_populate_record()(Tom Lane)中 JSON 字符串 Literals 到 JSON 类型输出列的转换

在这种情况下,应该将 Literals 作为独立的 JSON 值生成,但是如果 Literals 包含任何需要转义的字符,则代码行为不正确。

  • 修复正则表达式中{1,1}量词的错误优化(Tom Lane)

这些量词被视为无操作并已被优化掉;但是文档指定它们对附加的子表达式强加贪婪,或者在非贪婪变体{1,1}?的情况下强加不贪婪,但这没有发生。仅当子表达式包含捕获括号或向后引用时,才会发生不当行为。

  • 初始化新进程的pg_stat_activity数据时,避免可能的故障(Tom Lane)

某些可能失败的操作(例如,将从 SSL 证书提取的字符串转换为数据库编码)正在关键部分内执行。失败将导致由于违反共享pg_stat_activity数据的访问协议而导致数据库范围内的锁定。

  • 修复竞争条件,以检查有冲突的邮局主管(Tom Lane)是否仍在使用预先存在的共享内存段

  • 修复 walreceiver 的 signal 处理程序(Tom Lane)中的不安全编码

这样可以避免罕见的问题,在这些问题中,walreceiver 进程在被命令关闭时会崩溃或死锁。

  • 避免在未连接到特定数据库的进程中尝试进行数据库访问以进行参数检查(Vignesh C,Andres Freund)

该错误可能导致失败,例如“如果没有选择数据库就无法读取 pg_class”。

  • 如果使用 SSL 并且 OpenSSL 的待处理数据缓冲区包含 256 字节的精确倍数,则避免 libpq 挂起(David Binderman)

  • 改进 initdb 对系统时区的多个等效名称的处理(Tom Lane,Andrew Gierth)

使 initdb 检查/etc/localtime符号链接(如果存在),以断开系统时区等效名称之间的联系。当存在多个相同的时区时,initdb 更有可能选择用户期望的时区名称。如果/etc/localtime不是到区域数据文件的符号链接,或者从TZ环境变量确定时区,它也不会更改行为。

另外,当TZ/etc/localtime都不提供提示时,相对于该时区的其他拼写,更喜欢UTC。这修复了 tzdata 2019a 的更改使UCTUTC区域名称等效的烦恼:然后 initdb 更喜欢UCT,几乎没人想要。

  • 修复 pg_dump 和 pg_dumpall 发出的GRANT命令对数据库和表空间的排序(Nathan Bossart,Michael Paquier)

如果已发出级联授权,则由于GRANT命令的执行 Sequences 不遵守其相互依赖性,还原可能会失败。

  • 使 pg_dump 使用CREATE TABLE然后ATTACH PARTITION重新创建表分区,而不是在创建命令中包含PARTITION OF(ÁlvaroHerrera,David Rowley)

这避免了分区的列 Sequences 可能会更改为与父级匹配的问题。而且,现在即使未还原其父表,也可以从转储中还原该分区(作为独立表)。 ATTACH将失败,但是可以忽略不计。

  • 修复来自 reindexdb 的误导性错误报告(Julien Rouhaud)

  • 如果在使用并行作业时发生错误,请确保 vacuumdb 返回正确的状态(Julien Rouhaud)

  • 修复contrib/auto_explain不会在并行查询中引起问题(Tom Lane)

以前,即使auto_explain尚未记录父查询,并行工作者也可能尝试记录其查询。有时这可能会起作用,但会造成混乱,并且在某些情况下会导致失败,例如“在 shm TOC 中找不到密钥 N”。

此外,解决一个因果关系错误,即使将采样率设置为 1.0,该错误也不一定会记录每个查询。

  • contrib/postgres_fdw中,说明通过本地BEFORE ROW UPDATE触发器进行的可能的数据修改(Shohei Mochizuki)

如果触发器修改了原本不会被UPDATE更改的列,则新值不会传输到远程服务器。

  • 在 Windows 上,当数据库编码设置为 SQL_ASCII 并尝试记录非 ASCII 字符串时,请避免失败(Noah Misch)

该代码假定这些字符串必须使用 UTF-8,并且如果它们似乎没有被有效地编码,则将引发错误。现在,只需将未翻译的字节传输到日志。

  • 使 PL/pgSQL 的头文件成为 C -safe(George Tarasov)