选择 打开 改范围 完整检索页

PostgreSQL 10.8 发布说明

E.16. 发布版本 10.8 #

发布日期:. 2019-05-09

本次发布包含来自 10.7 的多项修复。 有关 10 主版本新特性的说明,请参见 Section E.24.

E.16.1. 迁移到版本 10.8

对于运行 10.X 的用户,不需要执行导出/恢复。

但是,如果是从早于 10.6 的版本升级,请参见 Section E.18

E.16.2. 变更

  • 防止通过选择率估计器绕过行级安全策略(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 发布时,更新临时表和不记录 WAL 的表抛出不正确的错误(Peter Eisentraut)

    对于发布而言,应当忽略此类表,但部分代码未能做到这一点。

  • 目标关系为可更新视图时,修复包含多行 VALUESINSERT ... 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 策略的表,此类检查可能以调用视图的用户身份执行,而非按预期以视图所有者的身份执行。

  • 按照 SQL:2006 及后续标准的要求,当 xmloption 设置为 content 时,接受 XML 文档作为 xml 类型的有效值(Chapman Flack)

    以前,PostgreSQL 遵循不允许这种用法的 SQL:2003 定义。但这给转储/恢复带来了严重问题:没有任何 xmloption 设置能够接受所有有效的 XML 数据。因此,改为采用 2006 版的定义。

    同时修改了 pg_dump,使其在恢复数据时输出 SET xmloption = content,确保即使当前设置为 document,转储/恢复也能正常工作。

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

    即使 postmaster.pid 文件已被删除,postmaster 现在也更有可能检测到上一次 postmaster 运行留下的活跃进程。

  • 避免将并行工作进程的事务计为独立事务(Haribabu Kommi)

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

    二月份小版本中应用的一项修复对向后兼容性考虑得不够周全。如果使用该小版本的备库读取由更早小版本的主库生成的 GIN 页面删除 WAL 记录,就会出现问题。

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

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

  • 在适当情况下,容忍 fsyncsync_file_range 调用返回 EINVALENOSYS 错误(Thomas Munro,James Sewell)

    此前将文件同步失败改为触发 panic 的做法,在某些失败可预见且实质上表示操作不受支持的情况下显得过于谨慎。

  • 在 BRIN 汇总操作期间,在自动清理的 pg_stat_activity 显示中报告正确的关系名(Álvaro Herrera)

  • 修复从 FULL 外连接向外引用的横向引用导致的 failed to build any N-way joins 规划器失败(Tom Lane)

  • 修复将返回集合的函数应用于可证明为空的关系时的查询规划错误(Tom Lane,Julien Rouhaud)

    在 v10 中,这一疏漏仅导致计划效率略低,但在 v11 中可能引发 set-valued function called in context that cannot accept a set 错误。

  • 执行有关是否允许可能泄漏信息的操作符访问 pg_statistic 数据的规则时,检查正确用户的权限(Dean Rasheed)

    通过视图访问底层表时,在决定能否将可能泄漏信息的操作符应用于该表的统计数据时,应考虑视图所有者的权限,而非发出查询的用户的权限。这使规划器关于数据可见性的规则与执行器一致,避免不必要的低效计划。

  • 在存在大量相等条件和大量可能相关的外键约束时,加快规划速度(David Rowley)

  • 避免回滚创建了大量表的事务时发生 O(N^2) 性能问题(Tomas Vondra)

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

  • 修复动态共享内存管理中的竞争条件(Thomas Munro)

    这些问题可能导致 dsa_area could not attach to segmentcannot unpin a segment that is not pinned 错误。

  • 修复热备 postmaster 收到 smart 关闭请求后可能无法关闭的竞争条件(Tom Lane)

  • 修复 pg_identify_object_as_address() 收到无效输入时可能发生的崩溃(Álvaro Herrera)

  • 修复 txid_status() 中可能发生的 could not access status of transaction 失败(Thomas Munro)

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

    只要密码字符串以相应字符开头,就可能被误认为已正确哈希为 SCRAM-SHA-256 或 MD5 格式。这样的密码会被接受,但之后无法使用。

  • 修复对隐含编码不同于数据库编码的 lc_time 设置的处理(Juan José Santamaría Flecha,Tom Lane)

    在此类区域设置下,包含非 ASCII 字符的本地化月份名或星期名以前会导致意外错误或错误输出。

  • 修复涉及一元负号操作符时不正确的 operator_precedence_warning 检查(Rikard Falkeborn)

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

  • 重新安排 REINDEX 的处理,以避免重建 pg_class 的单个索引时发生断言失败(Andres Freund,Tom Lane)

  • 修复参数化虚拟路径引发的规划器断言失败(Tom Lane)

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

    核心代码不依赖此项,但某些扩展会依赖。

  • 修复 Windows 上间歇出现的 could not reattach to shared memory 会话启动失败(Noah Misch)

    此前未识别出的一个失败来源,是为进程的默认线程池创建线程栈。现在安排在不同的内存区域分配此类栈。

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

    缺少读取目录的权限等错误未被正确检测或报告;代码反而静默地表现得像目录为空一样。

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

    缺少分号导致 ecpg 程序中的 SET variable = DEFAULT 被错误转换(但 SET variable TO DEFAULT 不受影响),产生服务器会拒绝的语法无效输出。此外,在列出多个类型名的 DROP TYPEDROP DOMAIN 命令中,实际只处理了第一个类型名。

  • 使 ecpgCREATE TABLE AS 语法与服务器一致(Daisuke Higuchi)

  • 修复 ecpg 处理包含文件名时可能发生的缓冲区越界(Liu Huailing,Fei Wu)

  • 使用远程分组或聚合的查询,其 SELECT 列表项为非相关子查询、外层引用或参数符号时,避免 contrib/postgres_fdw 发生崩溃(Tom Lane)

  • 避免 lo_unlink() 调用失败时 contrib/vacuumlo 发生崩溃(Tom Lane)

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

    这修正了 zic 的一个小缺陷,它曾使 Africa/Casablanca 时区在 2440 年输出不正确的转换时间;同时添加了对 zic 新选项 -r 的支持。

  • 将时区数据文件更新到 tzdata 2019a 版,以反映巴勒斯坦和梅特拉卡特拉的夏令时法规变更,并修正以色列的历史数据。

    Etc/UCT 现在是指向 Etc/UTC 的向后兼容链接,不再是一个会生成缩写 UCT 的独立时区;如今,该缩写通常是拼写错误。PostgreSQL 仍会接受 UCT 作为输入的时区缩写,但不会输出它。