发布日期:. 2020-02-13
本次发布包含来自 10.11 的多项修复。 有关 10 主版本新特性的说明,请参见 Section E.24.
为 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)
由于哈希表键创建有误,LWLock 统计代码(默认不编译,需要使用 -DLWLOCK_STATS 编译)可能为同一个 LWLock 和后端进程报告多个条目。
修复导致 Windows 上进程间信号延迟传递的竞争条件(Amit Kapila)
这使 NOTIFY 出现了可见的时序异常,也可能导致其他错误行为。
在 Windows 上,发生 ERROR_ACCESS_DENIED 文件访问失败后重试几次(Alexander Lakhin,Tom Lane)
这有助于处理目标文件已被标记为删除、但尚未实际消失,导致打开文件失败的情况。例如,pg_ctl 在探测 postmaster 是否已经关闭时,经常因此类错误而失败。