pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
发布日期:. 2019-05-09
此版本包含自 9.5.16 以来的多种修复。 有关 9.5 大版本中新特性的信息,参见 第 E.26 节。
防止通过选择率估计器绕过行级安全策略(Dean Rasheed)
规划器的一些选择率估计器会对 pg_statistic 中的 值(如最常见值)应用用户定义的操作符。因此,泄漏型操作符可以泄露 数据列中的一些条目,即使调用用户没有读取该列的权限。我们在 CVE-2017-7484 中加了限制来防止这一点,但没有考虑到行级安全的影响。 有 SQL 权限读取某列、但因 RLS 策略被禁止看到某些行的用户,仍可能 通过泄漏型操作符了解这些行的内容。本补丁进一步收紧规则,仅当没有 相关 RLS 策略时才允许把泄漏型操作符应用于统计数据。 (CVE-2019-10130)
修复对每个表都可被排除的继承树或分区表执行 UPDATE 或 DELETE 时的行为(Amit Langote、Tom Lane)
这类情况下,当存在 RETURNING 子句时,查询没有报告 正确的输出列集合;如果有应当触发的语句级触发器,它也没有触发。
修复目标关系是可更新视图时带多行 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 EXISTS 与 EXECUTE 的组合 应当能工作,但语法中遗漏了它。
确保行级安全策略表达式中出现的子 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 文件已被移除,postmaster 现在 也更可能检测到上一个 postmaster 实例仍有活动进程。
修复 GIN 索引 WAL 记录的不兼容(Alexander Korotkov)
二月份小版本中应用的一个修复对向后兼容性不够谨慎,导致那个年代的备库 服务器读取前一个小版本的主库生成的 GIN 页删除 WAL 记录时出问题。
在适当的情况下容忍 fsync 和 sync_file_range 调用的 EINVAL 和 ENOSYS 错误结果(Thomas Munro、James Sewell)
此前对文件同步失败就 panic 的更改对于某些失败可预见且基本上意味着 “操作不受支持”的情况显得过于偏执。
修复 FULL 外连接中通向外部横向引用导致的 “failed to build any N-way joins” 规划器失败(Tom Lane)
在执行关于让泄漏型操作符看到 pg_statistic 数据的规则时,检查正确用户的权限(Dean Rasheed)
当底层表通过视图被访问时,在决定是否可以把泄漏型操作符应用于该表的 统计数据时,考虑视图所有者的权限而不是发起查询的用户的权限。这使 规划器关于哪些数据可见的规则与执行器的规则一致,避免了不必要的 低劣计划。
避免回滚创建了许多表的事务时的 O(N^2) 性能问题(Tomas Vondra)
修复动态共享内存管理中的竞态条件(Thomas Munro)
这些可能导致 “dsa_area could not attach to segment” 或 “cannot unpin a segment that is not pinned” 错误。
修复热备 postmaster 收到 smart 关闭请求后可能不关闭的竞态条件 (Tom Lane)
修复给 pg_identify_object_as_address() 无效输入时 可能的崩溃(Álvaro Herrera)
收紧对编码后的 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 = DEFAULTSET )被错误翻译,产生服务器会拒绝的语法无效输出。 此外,在列出多个类型名的 variable TO DEFAULTDROP TYPE 或 DROP DOMAIN 命令中,实际上只处理了第一个类型名。
把 ecpg 的 CREATE TABLE AS 语法与服务器的同步(Daisuke Higuchi)
修复 ecpg 处理 include 文件名时可能的缓冲 区越界(Liu Huailing、Fei Wu)
避免 lo_unlink() 调用失败时 contrib/vacuumlo 崩溃(Tom Lane)
把我们的时区库副本与 IANA tzcode 版本 2019a 同步(Tom Lane)
这更正了 zic 的一个小 bug——它在 Africa/Casablanca 时区输出错误的 2440 年转换, 并增加了对 zic 新 -r 选项的支持。
更新时区数据文件到 tzdata 版本 2019a,涉及 巴勒斯坦和梅特拉卡特拉的夏令时法规变更,以及以色列的历史修正。
Etc/UCT 现在是指向 Etc/UTC 的 向后兼容链接,而不再是生成缩写 UCT 的独立时区 ——如今 UCT 通常是笔误。PostgreSQL 仍然 接受 UCT 作为输入时区缩写,但不会输出它。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。