On this page
E.2. 11.7 版
发布日期: 2020-02-13
此版本包含自 11.6 起的各种修复程序。有关主要版本 11 中新功能的信息,请参阅Section E.9。
E.2.1. 迁移到版本 11.7
运行 11.X 的用户不需要转储/还原。
但是,如果要从 11.6 之前的版本升级,请参见Section E.3。
E.2.2. Changes
- 为
ALTER ... DEPENDS ON EXTENSION
(ÁlvaroHerrera)添加缺少的权限检查
将对象标记为依赖于 extensions 没有任何特权检查。这种监督允许任何用户将例程,触发器,物化视图或索引标记为任何能够删除扩展的用户都可以删除的对象。要求主叫用户拥有指定的对象(因此有权删除它)。 (CVE-2020-1720)
- 确保适当时将分区表上的行触发器正确克隆到子分区(ÁlvaroHerrera)
创建或附加分区时,可能会丢失用户定义的触发器(但不是外键触发器或延迟的唯一约束触发器)。
修复逻辑复制订户代码以在适当的时候执行每列
UPDATE
触发器(Peter Eisentraut)当必须将大笔 Transaction 溢出到许多单独的临时文件中时,避免逻辑解码失败(Amit Khandekar)
修复逻辑复制订户处理行更新时可能发生的崩溃或数据损坏(Tom Lane,Tomas Vondra)
仅当订户的表包含未从发布者复制的列并且具有按引用传递的数据类型时,此错误才引起可见的问题。
修复 DDL 在订阅关系上更改后逻辑复制订阅服务器崩溃的问题(Jehan-Guillaume de Rorthais,Vignesh C)
修复数据库崩溃并重启后逻辑复制发布程序中的故障(Vignesh C)
确保
pg_replication_slot_advance()
对物理复制插槽的影响将在重新启动后持续存在(Alexey Kondratov,Michael Paquier)使用
REPLICA IDENTITY FULL
提高逻辑复制的效率(Konstantin Knizhnik)
在更新或删除操作期间搜索现有 Tuples 时,返回第一个匹配的 Tuples 而不是最后一个。
- 确保始终在正确的时间关闭并行计划(Kyotaro Horiguchi)
众所周知,这种疏忽会导致多批并行散列联接产生“临时文件泄漏”警告。
- 防止过早关闭限制节点下方的 Gather 或 GatherMerge 计划节点(Amit Kapila)
如果这样的计划节点需要多次扫描(例如,如果它在 Nestloop 内部),则可以避免失败。
提高具有多个内核(Gang Deng,Thomas Munro)的 CPU 上的并行哈希联接的效率
没有可用的动态共享内存插槽时,请避免并行
CREATE INDEX
崩溃(Thomas Munro)
而是回退到非并行索引构建。
没有可用的动态共享内存插槽时避免内存泄漏(Thomas Munro)
在临时表(Michael Paquier,Heikki Linnakangas,Andres Freund)上执行索引创建,删除或重建时,忽略
CONCURRENTLY
选项
如果临时表具有ON COMMIT
操作,这可以避免奇怪的故障。无论如何,对临时表使用CONCURRENTLY
都是没有好处的,因为其他会话无法访问该表,因此多余的处理毫无意义。
修复了在标记为
ON COMMIT DELETE ROWS
(Tom Lane)的临时表上重置表达式索引时可能出现的故障修复了使用
box
,range
和inet
数据类型的 BRIN 索引操作可能崩溃的问题(Heikki Linnakangas)修复 GIN 索引中已删除页面的处理(Alexander Korotkov)
避免可能的死锁,对已删除页面状态的不正确更新以及无法遍历最近删除的页面。
使用多行
VALUES
列表(“汤姆车道”)中的 SubPlan(sub_SELECT
)修复可能的崩溃修复在 Tuples 转换期间无法为“缺失”属性插入默认值的问题(Vik Fearing,Andrew Gierth)
当它们来自由ALTER TABLE ADD COLUMN
添加且具有恒定默认值的列时,它们可能导致值错误地读取为 NULL。
- 修复 FileClose()失败后崩溃的问题(Noah Misch)
仅在启用data_sync_retry
时才能观察到此问题,因为否则 FileClose()失败将被报告为 PANIC。
使用按引用传递的聚合过渡状态来修复不太可能的崩溃(Andres Freund,Teodor Sigaev)
改善
to_date()
和to_timestamp()
(Tom Lane,ÁlvaroHerrera)中的错误报告
关于 Importing 字符串中不正确的月份或日期名称的报告可能会截断多字节字符中间的 Importing,从而导致编码错误的错误消息,从而可能导致后续失败。截断下一个空格。
修正 BC 日期的
EXTRACT(ISOYEAR FROM timestamp)
的不符结果(Tom Lane)当系统目录中存在自引用视图(Tom Lane)时,请避免
information_schema
视图中的堆栈溢出
自我参照的观点行不通;它将始终导致无限递归。在尝试执行视图时,我们正确地处理了这种情况,但是在询问它是否可自动更新时,我们没有正确地处理这种情况。
- 确保 walsender 进程在
pg_stat_activity
(ÁlvaroHerrera)中的事务开始时间始终显示 NULL。
以前,xact_start
列有时会显示流程开始时间。
通过非常大的内部关系提高哈希联接的性能(Thomas Munro)
修复“
EXPLAIN
输出”中“已删除子计划”字段的位置(Daniel Gustafsson,Tom Lane)
在非文本输出格式中,此字段在“计划”子组内发出,导致语法上无效的输出。将其按预期方式附加到父 Append 或 MergeAppend 计划节点。这也将导致该字段也以文本输出格式更改位置:如果在同一计划节点上附加了任何 InitPlans,则现在将在这些计划之前显示“已删除子计划”。
- 如果用户可以读取查询中实际命名的表的相应列(Dilip Kumar,Amit Langote),则允许计划者将潜在泄漏的测试应用于子表统计信息
此更改解决了 CVE-2017-7484 修复程序所创建的分区表的性能问题。该安全修补程序不允许将泄漏运算符应用于当前用户无权直接读取的列的统计信息。但是,通常只在父分区表上授予权限,而不在单个分区上授予权限是很常见的。在这种情况下,用户可以通过父级读取该列,因此此安全限制没有任何意义。它只会导致计划者的估算比必要的要差。
修复了
<@
和@>
范围运算符(Michael Paquier,Andrey Borodin,Tom Lane)的选择性计算中的边缘情况崩溃和错误估计应用最常用值扩展的统计信息时,请忽略系统列(Tomas Vondra)
这样可以防止受影响的查询出现“不允许负位图集成员”计划程序错误。
- 修复 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
之前而不是在(Tom Lane)之后,将传入的NOTIFY
消息发送到 Client 端。
此项更改可确保使用 libpq 和其他与此类似的 Client 端库,在 Client 端认为事务完成时,在事务期间收到的任何通知将可用。这在实际应用中可能没有什么区别(无论如何都需要处理异步通知)。但它使构建具有可复制行为的测试用例更加容易。
- 即使尚未在(Tom Lane)中编译 GSSAPI 代码,也允许 libpq 解析所有与 GSS 相关的连接参数
这使得行为类似于我们的 SSL 支持,在很早以前就认为始终接受所有相关参数是一个好主意,即使由于某些特定版本缺少该功能而忽略或限制了其中一些参数。
- 修复 ecpg 的
PGTYPEStimestamp_fmt_asc()
函数中对%b
和%B
格式代码的错误处理(Tomas Vondra)
由于出现一对一错误,这些代码将打印错误的月份名称,否则可能会崩溃。
修复并行 pg_dump/pg_restore 以更优雅地处理创建工作进程的失败(Tom Lane)
尝试通过 signal 终止并行 pg_dump/pg_restore 运行时,防止可能的崩溃或锁定(Tom Lane)
在 pg_upgrade 中,在表中搜索不可升级的数据类型时查看数组和范围(Tom Lane)
对 createuser 的
--connection-limit
选项应用更全面的语法检查(ÁlvaroHerrera)在更多情况下,应对 PL/pgSQL 复合类型变量引用的特定类型的更改(Ashutosh Sharma,Tom Lane)
删除并重新创建 PL/pgSQL 变量引用的复合类型可能会导致“无法使用 OID * NNNN
*打开关系”错误。
尝试将
UPDATE remote_tab SET (x,y) = (SELECT ...)
之类的命令发送到远程服务器(Tom Lane)时,避免在postgres_fdw
中崩溃在
contrib/dict_int
中,拒绝maxlen
少于一的设置(Tomas Vondra)
这样可以防止由于该参数的愚蠢设置而导致崩溃。
- 在
contrib/tablefunc
的crosstab()
函数中禁止 NULL 类别值(Joe Conway)
这种情况永远都不会有用,它会在某些平台上崩溃。
- 修复 configure 的针对 OpenSSL
SSL_clear_options()
函数的探针,以便它与 1.1.0 之前的 OpenSSL 版本一起使用(Michael Paquier,Daniel Gustafsson)
当针对旧版本的 OpenSSL 构建 PostgreSQL 时,此问题可能导致无法根据需要设置 SSL 压缩选项。
- 将一些超时和统计信息跟踪 GUC 变量标记为
PGDLLIMPORT
,以允许扩展程序在 Windows 上访问它们(Pascal Legrand)
这适用于idle_in_transaction_session_timeout
,lock_timeout
,statement_timeout
,track_activities
,track_counts
和track_functions
。
- 在“平板”内存上下文的完整性检查中避免内存泄漏(Tomas Vondra)
这对于生产版本来说不是问题,因为它们通常不会启用内存上下文检查。但是在调试版本中泄漏可能会非常严重。
- 修复 LWLock 统计机制报告的多个统计条目(富士井正雄)
由于哈希表密钥创建错误,LWLock 统计代码(默认情况下未构建;它需要使用-DLWLOCK_STATS
进行编译)可能报告同一 LWLock 和后端进程的多个条目。
- 修复导致 Windows 上进程间 signal 延迟传递的竞争状况(Amit Kapila)
这导致NOTIFY
中出现可见的计时奇数,并且可能还有其他不良行为。
- 在 Windows 上,
ERROR_ACCESS_DENIED
文件访问失败后重试几次(Alexander Lakhin,Tom Lane)
这有助于应对文件打开尝试失败的情况,因为目标文件被标记为删除但尚未 true 消失。例如,pg_ctl 在尝试检查邮局主管是否已关闭时经常因此类错误而失败。