E.12. 发布版本 10.12 #
发布日期:. 2020-02-13
本次发布包含来自 10.11 的多项修复。有关 10 主版本新特性的说明,请参见第 E.24 节。
E.12.2. 变更
为
ALTER ... DEPENDS ON EXTENSION补上缺失的权限检查(Álvaro Herrera)将对象标记为依赖某个扩展时,没有进行任何权限检查。这一疏漏使任何用户都可以将例程、触发器、物化视图或索引标记为可由任何有权删除该扩展的用户删除。现在要求调用用户拥有指定对象(因而有权删除它)。(CVE-2020-1720)
修复逻辑复制订阅者代码,使其在适当情况下执行逐列
UPDATE触发器(Peter Eisentraut)避免大事务必须溢写到许多独立临时文件时逻辑解码发生失败(Amit Khandekar)
修复逻辑复制订阅者处理行更新时可能发生的崩溃或数据损坏(Tom Lane,Tomas Vondra)
只有当订阅者的表包含未从发布者复制、且数据类型按引用传递的列时,此缺陷才会导致可见问题。
修复对已订阅关系进行 DDL 变更后逻辑复制订阅者的崩溃(Jehan-Guillaume de Rorthais,Vignesh C)
修复数据库崩溃并重启后逻辑复制发布者的失败(Vignesh C)
提高使用
REPLICA IDENTITY FULL的逻辑复制效率(Konstantin Knizhnik)更新或删除操作中查找现有元组时,返回第一个匹配元组,而非最后一个。
防止过早关闭位于 Limit 节点下方的 Gather 或 GatherMerge 计划节点(Amit Kapila)
这可以避免此类计划节点需要被扫描多次时发生失败,例如它位于嵌套循环内侧时。
避免没有空闲动态共享内存槽时发生内存泄漏(Thomas Munro)
在临时表上创建、删除或重建索引时,忽略
CONCURRENTLY选项(Michael Paquier,Heikki Linnakangas,Andres Freund)这可以避免临时表具有
ON COMMIT动作时发生奇怪的失败。对临时表使用CONCURRENTLY本来就没有益处,因为其他会话无法访问该表,额外处理没有意义。修复重置标记为
ON COMMIT DELETE ROWS的临时表上的表达式索引时可能发生的失败(Tom Lane)修复对
box、range和inet数据类型执行 BRIN 索引操作时可能发生的崩溃(Heikki Linnakangas)修复 GIN 索引中对已删除页面的处理(Alexander Korotkov)
避免可能发生的死锁、对已删除页面状态的不正确更新,以及无法遍历最近删除页面的问题。
修复多行
VALUES列表中包含 SubPlan(子SELECT)时可能发生的崩溃(Tom Lane)修复 FileClose() 失败后发生的崩溃(Noah Misch)
只有启用
data_sync_retry时才能观察到此问题,否则 FileClose() 失败会被报告为 PANIC。修复使用按引用传递的聚合转换状态时发生的罕见崩溃(Andres Freund,Teodor Sigaev)
改进
to_date()和to_timestamp()中的错误报告(Tom Lane,Álvaro Herrera)报告输入字符串中不正确的月份名或星期名时,可能在多字节字符中间截断输入,导致错误消息的编码不正确,并可能引发后续失败。现在改为在下一个空白处截断。
修复对公元前日期计算
EXTRACT(ISOYEAR FROM时结果相差一的问题(Tom Lane)timestamp)避免系统目录中存在自引用视图时
information_schema视图发生栈溢出(Tom Lane)自引用视图无法正常工作,它总会导致无限递归。尝试执行视图时,我们已能正确处理这种情况,但在查询它是否可自动更新时却未能正确处理。
确保 WAL 发送进程进程在
pg_stat_activity中的事务开始时间始终显示为 NULL(Álvaro Herrera)以前,
xact_start列有时会显示进程启动时间。提高内侧关系非常大时的哈希连接性能(Thomas Munro)
修复为范围操作符
<@和@>计算选择率时在边界情况下发生的崩溃和估算错误(Michael Paquier,Andrey Borodin,Tom Lane)应用最常见值扩展统计信息时忽略系统列(Tomas Vondra)
这可避免受影响查询发生“negative bitmapset member not allowed”规划器错误。
修复 BRIN 索引逻辑,使其支持假想 BRIN 索引(Julien Rouhaud,Heikki Linnakangas)
以前,如果“索引建议器”扩展尝试让规划器生成包含假想 BRIN 索引的计划,就会失败,因为 BRIN 代价估算代码始终尝试实际访问索引的元页面。现在会检查索引是否只是假想索引;如果是,则使用索引参数的默认假设。
改进对带条件
INSTEAD规则的视图尝试使用自动更新时的错误报告(Dean Rasheed)这种用法从未得到支持,但以前只在执行时才抛出错误,因此它可能被规划器错误掩盖。
防止复合类型通过范围类型间接包含自身(Tom Lane,Julien Rouhaud)
禁止返回
record等伪类型的分区键表达式(Tom Lane)修复索引表达式使用禁止的类型时的错误报告(Amit Langote)
修复仅包含
VALUES列表的视图的转储,使其能够处理视图输出列被重命名的情况(Tom Lane)确保计算视图或规则的依赖关系时,将
XMLTABLE结构中使用的数据类型和排序规则考虑在内(Tom Lane)以前,如果某个类型未在视图中的其他地方被引用,删除该类型就可能破坏使用
XMLTABLE的视图。此修复不会纠正现有视图已记录的依赖关系,仅对新建视图生效。防止 RADIUS 认证参数被意外转换为小写或截断(Marcos David)
pg_hba.conf解析器错误地将这些字段当作 SQL 标识符,而它们通常并不是。在发送
ReadyForQuery之前向客户端传送收到的NOTIFY消息,而非在之后发送(Tom Lane)此更改确保,对于 libpq 以及行为类似的其他客户端库,当客户端认为事务已完成时,事务期间收到的所有通知都已可用。这在实际应用中可能没有影响(无论如何,应用都需要处理异步通知),但更便于编写行为可重现的测试用例。
即使未编译 GSSAPI 代码,也允许 libpq 解析所有与 GSS 有关的连接参数(Tom Lane)
这使其行为与我们的 SSL 支持类似:我们早已认为始终接受所有相关参数是可取的,即使某个构建缺少相应特性,导致部分参数被忽略或受到限制。
修复 ecpg 的
PGTYPEStimestamp_fmt_asc()函数对格式代码%b和%B的不正确处理(Tomas Vondra)由于索引偏差一的错误,这些代码会输出错误的月份名,或可能导致崩溃。
修复并行 pg_dump/pg_restore,使其更妥善地处理无法创建工作进程的情况(Tom Lane)
防止尝试通过信号终止并行 pg_dump/pg_restore 运行时可能发生的崩溃或卡死(Tom Lane)
在 pg_upgrade 搜索表中不可升级的数据类型时,检查数组和范围的内部类型(Tom Lane)
对 createuser 的
--connection-limit选项进行更全面的语法检查(Álvaro Herrera)避免
postgres_fdw尝试向远程服务器发送UPDATE remote_tab SET (x,y) = (SELECT ...)之类命令时发生崩溃(Tom Lane)在
contrib/dict_int中,拒绝小于一的maxlen设置(Tomas Vondra)这可防止该参数设置不合理时可能发生的崩溃。
在
contrib/tablefunc的crosstab()函数中禁止 NULL 类别值(Joe Conway)这种情况从未产生有用的结果,而且在某些平台上会导致崩溃。
将某些超时和统计跟踪 GUC 变量标记为
PGDLLIMPORT,以允许扩展在 Windows 上访问它们(Pascal Legrand)这适用于
idle_in_transaction_session_timeout、lock_timeout、statement_timeout、track_activities、track_counts和track_functions。避免“slab”内存上下文健全性检查中的内存泄漏(Tomas Vondra)
这不会影响生产构建,因为它们通常不会启用内存上下文检查;但在调试构建中,这种泄漏可能相当严重。
修复 LWLock 统计机制报告重复统计条目的问题(Fujii Masao)
由于 hash 表键创建有误,LWLock 统计代码(默认不编译,需要使用
-DLWLOCK_STATS编译)可能为同一个 LWLock 和后端进程报告多个条目。修复导致 Windows 上进程间信号延迟传递的竞争条件(Amit Kapila)
这使
NOTIFY出现了可见的时序异常,也可能导致其他错误行为。在 Windows 上,发生
ERROR_ACCESS_DENIED文件访问失败后重试几次(Alexander Lakhin,Tom Lane)这有助于处理目标文件已被标记为删除、但尚未实际消失,导致打开文件失败的情况。例如,pg_ctl 在探测 postmaster 是否已经关闭时,经常因此类错误而失败。