E.6. 11.3 版

发布日期: 2019-05-09

此版本包含自 11.2 起的各种修复程序。有关主要版本 11 中新功能的信息,请参阅Section E.9

E.6.1. 迁移到版本 11.3

运行 11.X 的用户不需要转储/还原。

但是,如果要从 11.1 之前的版本升级,请参见Section E.8

E.6.2. Changes

  • 防止通过选择性估计器绕过行级安全策略(Dean Rasheed)

某些计划者的选择性估算器将用户定义的运算符应用于pg_statistic中的值(例如,最常用的值)。因此,即使主叫用户没有读取该列的权限,泄漏的操作员也可以公开数据列中的某些条目。在 CVE-2017-7484 中,我们添加了限制来阻止所有这些,但我们未能考虑行级安全性的影响。拥有 SQL 权限以读取列的用户,但由于 RLS 策略而被禁止查看某些行,该用户仍可能通过泄漏运算符来了解有关那些行内容的信息。此修补程序进一步加强了规则,仅在没有相关的 RLS 策略时才允许将泄漏的运算符应用于统计数据。 (CVE-2019-10130)

  • 避免在分区路由错误报告期间访问已释放的内存(Michael Paquier)

该错误可能会导致崩溃,并且原则上可以使用它来泄露服务器内存内容。 (CVE-2019-10129)

  • 当分区表上的ALTER TABLE发现分区索引可重用时,避免目录损坏(Amit Langote,Tom Lane)

例如,当ALTER COLUMN TYPE发现不需要物理表重写时,就会发生这种情况。

  • 在单语句事务中创建带有ON COMMIT DROP和标识列的临时表时,避免目录损坏(Peter Eisentraut)

由于该案例实际上没有用,因此该危险被忽略了,因为临时表将在创建后立即删除。

  • 如果分区表包含的删除列比其分区多,则修复ALTER INDEX ... ATTACH PARTITION中的失败(ÁlvaroHerrera)

  • 修复在某些情况下无法将分区的现有索引附加到新创建的分区索引的情况(Amit Langote,ÁlvaroHerrera)

这将导致随后的使用分区索引的 DDL 中出现诸如“索引...在分区中找不到索引”之类的错误。

  • 为分区查询结果关系执行 EPQ 重新检查时避免崩溃(Amit Langote)

当使用READ COMMITTED隔离级别并且另一个会话同时更新了一些目标行时,会发生这种情况。

  • 修复已删除属性的多级分区表中的 Tuples 路由(Amit Langote,Michael Paquier)

  • 修复将外键约束初始验证的慢路径应用于分区表时的失败(Hadi Moshayedi,Tom Lane,Andres Freund)

除了在罕见的情况下无法使用快速路径(例如权限问题)外,这没有表现出来。

  • 修复继承树或分区表上的UPDATEDELETE的行为,其中每个表都可以排除在外(Amit Langote,Tom Lane)

在这种情况下,当出现RETURNING子句时,查询不会报告正确的输出列集,并且如果有应触发的语句级触发器,则不会触发它们。

  • 直接访问分区并将constraint_exclusion设置为on时,请使用分区的分区约束以及任何CHECK约束进行排除检查(Amit Langote,Tom Lane)

此更改将行为恢复到 v10 中的状态。

  • 尝试在事务提交中保留游标查询时发生错误时,避免服务器崩溃(Tom Lane)

如果某个过程在其具有打开的显式或隐式游标的情况下尝试提交(例如,PL/pgSQL FOR -loop 查询),则必须执行该游标以完成操作并保存其结果,然后才能执行事务提交。在执行过程中发生的错误导致崩溃。

  • 当存在FOR ALL TABLES发布时,请避免在更新临时表和未记录表时抛出错误(Peter Eisentraut)

出于发布目的,应忽略此类表,但是代码的某些部分未能这样做。

  • 如果目标关系是可更新的视图,则修复具有多个VALUES行的INSERT ... VALUES命令中显式DEFAULT项的处理(Amit Langote,Dean Rasheed)

如果该列的可更新视图没有默认值,但是其基础表具有一个默认值,则单行INSERT ... VALUES将使用基础表的默认值。但是,在多行情况下,始终使用 NULL。对其进行更正以使其类似于单行情况。

  • 修复CREATE VIEW以允许零列视图(Ashutosh Sharma)

我们应该允许与零列表保持一致。由于可以将表转换为视图,因此即使存在限制,也可以创建零列视图,从而导致转储/重新加载失败。

  • CREATE TABLE IF NOT EXISTS ... AS EXECUTE ...添加缺少的支持(Andreas Karlsson)

IF NOT EXISTSEXECUTE的组合应该有效,但语法省略了它。

  • 确保以正确的用户权限执行行级安全策略表达式中出现的SELECT子(Dean Rasheed)

以前,如果具有 RLS 策略的表是通过视图访问的,则此类检查可能是在用户调用视图时执行的,而不是应以视图所有者的身份执行。

  • xmloption设置为content时,按照 SQL:2006 及更高版本的要求,将 XML 文档接受为类型xml的有效值(Chapman Flack)

以前,PostgreSQL 遵循 SQL:2003 定义,不允许这样做。但这给转储/还原造成了严重的问题:没有设置xmloption可以接受所有有效的 XML 数据。因此,切换到 2006 年的定义。

pg_dump 也被修改为在恢复数据时发出SET xmloption = content,即使当前设置为document,也可以确保转储/恢复有效。

  • 改善服务器的启动时间,检查是否仍在使用预先存在的共享内存段(Noah Misch)

现在,即使删除了postmaster.pid文件,邮政局长也更有可能检测到来自先前邮政局长化身的活动进程。

  • 避免在 btree 索引真空逻辑中可能被零除(Piotr Stefaniak,Alexander Korotkov)

这可能导致关于是否需要清理索引的错误决定。

  • 避免将 ParallelWorker 的 Transaction 计为单独的 Transaction(Haribabu Kommi)

  • 修复 GIN 索引 WAL 记录不兼容的问题(Alexander Korotkov)

2 月份次要版本中应用的修复程序对向后兼容性的注意不够,如果该年份的备用服务器读取由先前次要版本的主服务器生成的 GIN 页面删除 WAL 记录,则会导致问题。

  • 修复在复制 Connecting 执行SHOW命令时可能发生的崩溃(Michael Paquier)

  • 一次从一个门户网站获取行时,避免服务器内存泄漏(Tom Lane)

  • 重建分区的关系缓存条目时避免内存泄漏(Amit Langote,Tom Lane)

  • 在适当的情况下,对于fsyncsync_file_range通话,可以容忍EINVALENOSYS错误结果(Thomas Munro,James Sewell)

在某些情况下,可预见的故障并实际上意味着“不支持操作”,在某些情况下,先前对文件同步故障感到恐慌的更改变得过于偏执。

  • 在 BRIN 摘要操作期间,在自动真空的pg_stat_activity显示中报告正确的关系名称(ÁlvaroHerrera)

  • 尝试在 GEQO 处于活动状态时(Tom Lane)计划分区智能联接时避免崩溃

  • 修复“无法构建任何* N * -way 联接失败”的计划程序故障,并导致从FULL外部联接引出的横向引用(汤姆·莱恩)

  • 修复查询计划不正确的问题,在该查询中,对返回为空的关系应用了返回集合的功能(Tom Lane,Julien Rouhaud)

在 v10 中,这种监督只会导致计划效率低下,但是在 v11 中,它可能会导致“在上下文中无法接受集合的情况下调用集合值函数”错误。

  • 强制执行有关让泄漏操作员查看pg_statistic数据的规则时,请检查相应用户的权限(Dean Rasheed)

当通过视图访问基础表时,请在考虑是否将泄漏运算符应用于表的统计数据而不是查询用户的特权时,考虑视图所有者的特权。这使得计划者关于可见数据的规则与执行者的规则相匹配,避免了不必要的计划不足。

  • 修复计划程序对分组查询的并行安全性评估(藤田悦郎)

以前,可能没有并行化的目标列表评估工作。

  • 修复计划程序的唯一索引逻辑(Tom Lane)中对“包含”索引列的错误处理

这可能导致无法识别包含列的唯一索引证明查询结果的唯一性,从而导致计划不佳。

  • 修复对数组强制表达式的不正确的严格性检查(Tom Lane)

例如,这可能允许对严格的 SQL 函数进行不正确的内联,从而导致不执行严格性条件。

  • 当存在许多相等条件和许多潜在相关的外键约束时,加快计划制定速度(David Rowley)

  • 回滚创建许多表的事务时避免 O(N ^ 2)性能问题(Tomas Vondra)

  • 修复动态共享内存分配中的极端情况服务器崩溃(Thomas Munro,Robert Haas)

  • 解决动态共享内存 Management 中的竞争条件(Thomas Munro)

这些可能导致“ dsa_area 无法连接到段”或“无法取消固定未固定的段”错误。

  • 修复了竞争情况,在这种情况下,热备用邮局主管在收到智能关机请求后可能无法关闭(Tom Lane)

  • 修复了当pg_identify_object_as_address()Importing 无效时可能发生的崩溃(ÁlvaroHerrera)

  • 修复了txid_status()(Thomas Munro)中可能的“无法访问 Transaction 状态”失败

  • 修复尝试将 SCRAM 身份验证与混合的 OpenSSL 库版本一起使用时身份验证失败的问题(Michael Paquier,Peter Eisentraut)

如果 libpq 使用的是 OpenSSL 1.0.1 或更旧的版本,而服务器使用的是 OpenSSL 1.0.2 或更高版本,则使用哪种 SASL 机制的协商将出错,从而导致混乱的“此构建不支持的通道绑定”错误消息。

  • 加强对编码的 SCRAM-SHA-256 和 MD5 密码的验证(Jonathan Katz)

具有正确的初始字符的密码字符串可能会误认为正确地哈希为 SCRAM-SHA-256 或 MD5 格式的密码字符串。该密码将被接受,但以后将无法使用。

  • 修复了对lc_time设置的处理,这些设置暗示了与数据库的编码不同的编码(JuanJoséSantamaríaFlecha,Tom Lane)

本地化的包含非 ASCII 字符的月份或日期名称以前在这些语言环境中导致了意外错误或错误输出。

  • 使用与服务器数据目录中的其他文件相同的权限创建current_logfiles文件(Haribabu Kommi)

以前,它使用log_file_mode指定的权限,但这可能会导致备份 Util 出现问题。

  • 修复涉及一元负运算符的不正确的operator_precedence_warning检查(Rikard Falkeborn)

  • 禁止将NaN作为浮点服务器参数的值(Tom Lane)

  • 重新安排REINDEX处理以避免为pg_class的各个索引重新索引时 assert 失败(Andres Freund,Tom Lane)

  • 修复参数化伪路径的计划程序 assert 失败(Tom Lane)

  • SnapBuildInitialSnapshot()(Antonin Houska)的结果中插入正确的测试函数

没有核心代码在乎这一点,但是某些扩展确实在乎。

  • 修复 Windows 上间歇性的“无法重新连接到共享内存”会话启动失败(Noah Misch)

这些失败的先前无法识别的根源是为进程的默认线程池创建线程堆栈。安排将此类堆栈分配到其他内存区域中。

  • 修复 Windows 上目录扫描中的错误检测(Konstantin Knizhnik)

未检测到或未正确报告错误,例如缺少读取目录的权限;而是代码默默地充当目录为空的行为。

  • 修复 ecpg(Tom Lane)中的语法问题

缺少分号会导致 ecpg 程序中的SET variable = DEFAULT(但不是SET variable TO DEFAULT)翻译错误,从而产生语法上无效的输出,服务器将拒绝该输出。此外,在列出多个类型名称的DROP TYPEDROP DOMAIN命令中,实际上仅处理了第一个类型名称。

  • CREATE TABLE AS的 ecpg 语法与服务器的同步(Hiis Higuchi)

  • 修复 ecpg 对包含文件名的处理中可能出现的缓冲区溢出问题(刘怀玲,吴飞)

  • 修复由于无法删除目标数据目录中的某些暂态文件而导致的 pg_rewind 故障(Michael Paquier)

  • 使 pg_verify_checksums 验证指向的数据目录是否是正确的 PostgreSQL 版本(Michael Paquier)

  • 当使用远程分组或聚合的查询的SELECT列表项是不相关的子选择,外部引用或参数符号(Tom Lane)时,避免在contrib/postgres_fdw中崩溃

  • 当选择用于向其中插入路由行的远程分区也是UPDATE子计划目标时,更改contrib/postgres_fdw以报告错误,稍后将在同一命令中对其进行更新(Amit Langote,Etsuro Fujita)

以前,这种情况导致服务器崩溃或UPDATE的错误结果。允许此类情况正常工作是将来的工作。

  • contrib/pg_prewarm中,如果由于某些原因预热失败,请避免无限期重新生成后台工作进程(Mithun Cy)

  • 如果lo_unlink()通话失败,请避免在contrib/vacuumlo中崩溃(Tom Lane)

  • 将我们的时区库副本与 IANA tzcode 版本 2019a(Tom Lane)同步

这可以纠正 zic 中的一个小错误,该错误导致其在Africa/Casablanca区域中输出不正确的 2440 年转换,并增加了对 zic 的新-r选项的支持。

  • 将时区数据文件更新为 tzdata 版本 2019a,以解决巴勒斯坦和 Metlakatla 的 DST 法律变更以及以色列的历史更正。

Etc/UCT现在是指向Etc/UTC的向后兼容性链接,而不是一个单独的区域,该区域生成缩写UCT,如今通常是一个错字。 PostgreSQL 仍然会接受UCT作为 Importing 区域的缩写,但不会输出它。