E.8. 版本 9.6.17 #
发布日期:. 2020-02-13
此版本包含自 9.6.16 以来的多种修复。有关 9.6 大版本中新特性的信息,参见第 E.25 节。
E.8.2. 变更
为
ALTER ... DEPENDS ON EXTENSION补上缺失的权限检查(Álvaro Herrera)把对象标记为依赖于扩展此前没有任何权限检查。这一疏漏允许任何用户把例程、触发器、物化视图或索引标记为任何能删除扩展的人都可以删除的对象。现在要求调用用户拥有指定对象(从而有权删除它)。(CVE-2020-1720)
修复大事务必须被溢出到许多单独临时文件时逻辑解码的失败(Amit Khandekar)
修复数据库崩溃并重启之后逻辑复制发布方的失败(Vignesh C)
防止位于 Limit 节点之下的 Gather 或 GatherMerge 计划节点过早关闭(Amit Kapila)
这避免了此类计划节点需要被扫描多次时的失败,例如当它位于 nestloop 内侧时。
避免没有空闲动态共享内存槽位时的内存泄漏(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)修复按引用传递的聚合转换状态不太可能的崩溃(Andres Freund、Teodor Sigaev)
改进
to_date()和to_timestamp()中的错误报告(Tom Lane、Álvaro Herrera)关于输入字符串中不正确月份或日期名称的报告,可能在多字节字符中间截断输入,导致错误编码的错误消息并引发后续失败。现在改为在下一个空白处截断。
修复公元前日期的
EXTRACT(ISOYEAR FROM的差一结果(Tom Lane)timestamp)避免系统目录中存在自引用视图时
information_schema视图中的栈溢出(Tom Lane)自引用视图无法工作;它总是导致无限递归。我们在尝试执行该视图时能正确处理这种情况,但在查询它是否自动可更新时不能。
改进有超大内侧关系的哈希连接的性能(Thomas Munro)
修复
<@和@>范围操作符选择率计算中的边界崩溃和估计错误(Michael Paquier、Andrey Borodin、Tom Lane)改进对试图在带条件
INSTEAD规则的视图上使用自动更新的错误报告(Dean Rasheed)这从未被支持过,但此前错误只在执行时抛出,因此可能被规划器错误掩盖。
防止复合类型通过范围类型间接包含自身(Tom Lane、Julien Rouhaud)
修复对禁止类型索引表达式的错误报告(Amit Langote)
修复仅包含
VALUES列表的视图的转储,以处理视图输出列被改名的情况(Tom Lane)把传入的
NOTIFY消息在发送ReadyForQuery之前而不是之后传给客户端(Tom Lane)这一更改确保在使用 libpq 及行为类似它的其他客户端库时,事务期间收到的任何通知在客户端认为事务完成之时都已可用。这在实际应用中可能没有差别(反正都需要应对异步通知);但它使构建行为可重现的测试用例更容易。
允许 libpq 在未编译 GSSAPI 代码时也解析所有与 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。修复导致 Windows 上进程间信号延迟传递的竞态条件(Amit Kapila)
这导致
NOTIFY中可见的时机异常,或许还有其他错误行为。在 Windows 上,
ERROR_ACCESS_DENIED文件访问失败后重试几次(Alexander Lakhin、Tom Lane)这有助于应对目标文件已被标记为删除但尚未真正消失而导致打开失败的情况。例如,pg_ctl 在探测 postmaster 是否已关闭时经常因这种错误而失败。