E.6.版本 10.8

发布日期: 2019-05-09

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

E.6.1. 迁移到版本 10.8

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

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

E.6.2. Changes

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

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

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

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

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

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

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

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

  • 当存在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文件,邮政局长也更有可能检测到来自先前邮政局长化身的活动进程。

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 当存在许多相等条件和许多潜在相关的外键约束时,加快计划制定速度(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-SHA-256 和 MD5 密码的验证(Jonathan Katz)

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

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

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

  • 修复涉及一元负运算符的不正确的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 对包含文件名的处理中可能出现的缓冲区溢出问题(刘怀玲,吴飞)

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

  • 如果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 区域的缩写,但不会输出它。