E.3. 版本 9.6.22 #
发布日期:. 2021-05-13
此版本包含自 9.6.21 以来的多种修复。有关 9.6 大版本中新特性的信息,参见第 E.25 节。
PostgreSQL 社区将于 2021 年 11 月停止对 9.6.X 版本系列的更新。建议用户尽快更新到较新的版本分支。
E.3.2. 变更
防止数组下标计算中的整数溢出(Tom Lane)
数组代码此前不会对数组下界加长度发生整数溢出的情况报错。这导致数组中靠后的条目变得不可访问(因为它们的下标无法写成整数),但更重要的是它干扰了后续的赋值操作。这可能导致内存覆写,随之而来的是崩溃或不希望的数据修改。(CVE-2021-32027)
修复
INSERT ... ON CONFLICT ... UPDATE目标列表中“垃圾”列的处理不当(Tom Lane)如果
UPDATE列表包含多列子选择(它们除了正常结果之外还会产生垃圾列),UPDATE路径最终会存储包含这些额外垃圾列值的元组。短期内这相当无害,但如果以后向表中添加新列,这些值就会变得可访问,若与所添加列的数据类型不匹配,可能导致故障。此外,在支持跨分区更新的版本中,这种情况触发的跨分区更新有相反的问题:垃圾列被从目标列表中移除,通常因多列子选择机制故障导致立即崩溃。(CVE-2021-32028)
允许
ALTER ROLE/DATABASE ... SET设置role、session_authorization和temp_buffers参数(Tom Lane)此前,过于严格的合法性检查可能拒绝这些命令,即使这些值在之后使用时本可正常工作。这给转储/恢复和升级场景带来了命令顺序隐患。
修复把
COLLATE表达式的结果强制转换为不可排序类型时的 bug(Tom Lane)这产生了一个
COLLATE看似应用于不可排序值的解析树。虽然这通常没有实际影响(因为COLLATE在运行时不起作用),但可能构造出在转储/恢复期间被拒绝的视图。禁止通过“快速路径”线上协议消息调用窗口函数和过程(Tom Lane)
这里只支持普通函数。尝试调用聚合函数虽然已经会失败,但调用窗口函数会导致崩溃,而调用过程只有在过程不做事务控制时才能工作。
扩展
pg_identify_object_as_address()以支持事件触发器(Joel Jacobson)修复
to_char()对负区间使用罗马数字月份格式代码的处理(Julien Rouhaud)此前,这类情况通常会导致崩溃。
修复 BRE 模式正则表达式中解析
\{量词时使用未初始化值的问题(Tom Lane)m,n\}这个错误可能导致量词表现为非贪婪,即表现得像完整正则表达式中的
{量词那样。m,n}?避免在估算带有很长固定前缀的正则表达式的选择率时除零(Tom Lane)
这通常会导致
NaN选择率值,引起断言失败或规划器行为异常。修复 BRIN 索引位图扫描中越表末访问的错误(Tomas Vondra)
如果 BRIN 索引使用的页范围大小不是 2 的幂,在某些边界情况下位图扫描可能试图取回超出表实际末尾的页,导致 “could not open file” 错误。
确保在关闭备库服务器的启动进程期间释放锁(Fujii Masao)
当备库服务器仍在恢复期间被关闭时,某些锁可能仍被持有。这会导致调试构建中的断言失败;生产构建中是否会有严重后果尚不清楚。
确保在较新的 FreeBSD 上默认使用
wal_sync_method=fdatasync(Thomas Munro)FreeBSD 13 支持
open_datasync,它通常会变成默认选择。但尚不清楚这对 Postgres 是否真的是改进,因此暂时保留原有默认值。确保在分离 DSM 段被中断时完成清理(Thomas Munro)
这个错误可能导致并行查询之后临时文件未被及时清理。
修复服务器中若干轻微的内存泄漏(Tom Lane、Andres Freund)
防止收到长度损坏的 ParameterDescription 消息时 libpq 陷入无限循环(Tom Lane)
修复 psql,恢复
\connect service=的先前行为(Tom Lane)something此前的一次 bug 修复导致在这种场景下环境变量(如
PGPORT)会覆盖服务文件中的条目。恢复先前行为,即优先级相反。修复 psql 的
\e及相关命令检测文件修改时的竞态条件(Laurenz Albe)打字极快的用户可能骗过该代码基于文件时间戳的临时编辑文件是否被修改的检测。
修复 pg_restore 漏检文件版本的问题(Tom Lane)
从不可寻址的源读取自定义格式归档时,pg_restore 忽略了检查归档版本。如果被喂给比它所支持的更新版本的归档,之后会混乱地失败。
为 pg_upgrade 增加更多对包含不可升级数据类型的用户表的检查(Tom Lane)
修复某些不可升级数据类型嵌入在容器类型(如数组或范围)内部的检测。同时禁止升级用户表中包含系统定义复合类型的列,因为这些类型的 OID 跨版本不稳定。
修复 pg_waldump 在生成逐记录统计时对
XACT记录的计数(Kyotaro Horiguchi)修复
contrib/amcheck不再对同时设置了元组标志HEAP_XMAX_LOCK_ONLY和HEAP_KEYS_UPDATED报怨(Julien Rouhaud)这是
SELECT FOR UPDATE之后的一种有效状态。调整 VPATH 构建规则以支持较新的 Oracle Developer Studio 编译器版本(Noah Misch)
修复 Solaris 上 PL/Python 对 Python 3 的测试(Noah Misch)