E.12.版本 10.2

发布日期: 2018-02-08

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

E.12.1. 迁移到版本 10.2

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

但是,如果您使用contrib/cube~>运算符,请参阅下面的条目。

另外,如果要从 10.1 之前的版本升级,请参见Section E.13

E.12.2. Changes

  • 修复包含多个表达式的分区键的处理(ÁlvaroHerrera,David Rowley)

该错误导致崩溃,或者经过精心设计的 Importing 导致任意后端内存的泄露。 (CVE-2018-1052)

  • 确保 pg_upgrade 制作的所有临时文件都不是世界可读的(Tom Lane,Noah Misch)

pg_upgrade 通常将其临时文件限制为只能由调用用户读取和写入。但是,如果用户的umask设置允许,则包含pg_dumpall -g输出的临时文件将是组可读或全局可读的,甚至是可写的。在多用户计算机上的典型用法中,umask和/或工作目录的权限足够严格,可以防止出现问题。但是在某些情况下,有些人可能会使用 pg_upgrade,而这种疏忽可能会使数据库密码泄露给不友好的人。 (CVE-2018-1053)

  • 修复在密钥共享锁定时更新的 Tuples 的清理(Andres Freund,ÁlvaroHerrera)

在某些情况下,VACUUM即使删除了这些 Tuples 也将无法删除,从而导致各种数据损坏情况。

  • 修复了在添加新的溢出页面后无法将哈希索引的元页标记为脏的潜在问题,这可能导致索引损坏(Lixian Zou,Amit Kapila)

  • 确保真空将始终清除 GIN 索引的待处理插入列表(泽田正彦)

这是确保删除死索引条目所必需的。旧代码将其倒退,如果其他一些进程正在同时运行清理操作,则允许 vacuum 跳过清理操作,从而有可能在索引中留下无效的条目。

  • 修复某些 LSN 提取(Jacob Champion,Asim Praveen,Ashwin Agrawal)中缓冲区锁定不足的问题

这些错误可能导致并发负载下的异常行为。潜在后果尚未得到充分描述。

  • 修复涉及平整其输出在GROUPING SETS中使用的子查询的查询结果(Heikki Linnakangas)

  • 修复布尔或数组类型的分区键的列表分区约束的处理(Amit Langote)

  • 避免在对继承树的查询中发生不必要的错误,该查询与ALTER TABLE NO INHERIT(Tom Lane)从树中删除某些子表同时发生

  • 修复了多个会话正在运行CREATE INDEX CONCURRENTLY时的虚假死锁故障(Jeff Janes)

  • VACUUM FULL期间,请尽快在pg_class中更新表格的大小字段(Amit Kapila)

这可以防止在重建表上的哈希索引时出现不良行为,因为这些索引使用pg_class统计信息来控制初始哈希大小。

  • 在零列上修复UNION/INTERSECT/EXCEPT(Tom Lane)

  • 禁止在类型表和分区上使用标识列(Michael Paquier)

目前,这些情况将被视为不受支持的功能。

  • 修复将各种错误插入身份列时应用正确的默认值的问题(Michael Paquier,Peter Eisentraut)

在几种情况下,尤其是COPYALTER TABLE ADD COLUMN,未应用预期的默认值,而是插入了空值。

  • 修复继承树包含外来子表时的故障(藤田悦郎)

在继承树中混合使用常规表和外部表会导致为UPDATEDELETE查询创建错误的计划。在某些情况下,这会导致可见的失败,尤其是当外部子表上存在行级触发器时。

  • 通过LATERAL子查询(汤姆巷)中VALUES内的相关子SELECT修复故障

  • 修复“无法为给定查询设计查询计划”计划程序失败的情况,这些情况涉及横向子查询(Tom Lane)内嵌套UNION ALL的情况

  • 允许将函数依赖性统计信息用于布尔列(Tom Lane)

以前,尽管可以在布尔列上声明并收集扩展的统计信息,但计划者无法应用它们。

  • 避免低估其分组列中包含 set-returning 函数的子查询发出的分组数(Tom Lane)

SELECT DISTINCT unnest(foo)相似的案例在 10.0 中的输出行计数估计值比早期版本中的输出行计数估计值低,这可能导致不利的计划选择。恢复先前的估计行为。

  • 修复在逻辑复制工作者中使用触发器的问题(Petr Jelinek)

  • 修复逻辑解码,以正确清理崩溃的事务的磁盘文件(厚实 Torikoshi)

逻辑解码可能会将 WAL 记录溢出到磁盘上,以进行生成许多 WAL 记录的事务。通常,这些文件在事务的提交或中止记录到达后被清除;但是,如果没有看到这样的记录,则删除代码的行为不正确。

  • 修复了 walsender 超时失败以及在处理大型事务时无法响应中断的问题(Petr Jelinek)

  • 修复复制源删除期间的竞争条件,该条件可能允许删除过程无限期 await(Tom Lane)

  • 允许pg_read_all_stats角色的成员在pg_stat_replication视图中查看 walsender 统计信息(Feike Steenbergen)

  • pg_stat_activity视图中将发送基本备份的 walsender 显示为活动状态(Magnus Hagander)

  • 修复了在pg_hba_file_rules视图中报告scram-sha-256身份验证方法的问题(Michael Paquier)

以前,此名称打印为scram-sha256,可能会使用户混淆正确的拼写。

  • 与其他特权测试功能一样,修复has_sequence_privilege()以支持WITH GRANT OPTION测试(Joe Conway)

  • 在使用 UTF8 编码的数据库中,请忽略任何声明不同编码的 XML 声明(Pavel Stehule,Noah Misch)

我们总是将 XML 字符串存储在数据库编码中,因此,允许 libxml 对另一种编码的声明进行操作会导致错误的结果。在 UTF8 以外的编码中,我们不会保证仍然支持非 ASCII XML 数据,因此请保留以前的行为以实现错误兼容性。此更改仅影响xpath()和相关功能;其他 XML 代码路径已经以这种方式起作用。

  • 提供与 Future 次要协议版本的前向兼容性(Robert Haas,Badrul Chowdhury)

到目前为止,PostgreSQL 服务器仅拒绝使用 3.0 版以上协议版本的请求,因此协议版本号的主要部分和次要部分之间在功能上没有区别。允许 Client 端请求版本 3.x 而不失败,发送回一条消息,表明服务器仅理解 3.0. 目前,这没有什么区别,但是回补此更改应可以更快地引入将来的次要协议升级。

  • 允许支持 SCRAM 通道绑定的 Client 端(例如 v11 或更高版本的 libpq)连接到 v10 服务器(Michael Paquier)

v10 没有此功能,并且关于是否使用它的连接时协商不正确。

  • 避免在ConditionVariableBroadcast()(汤姆·莱恩,托马斯·蒙罗)中进行 site 锁定

给定反复的不幸时间,试图唤醒所有 await 者 await 条件变量的过程可能会无限循环。由于 v10 中条件变量的用法有限,这仅影响并行索引扫描和复制插槽上的某些操作。

  • 清理在子事务中止期间正确 await 条件变量(Robert Haas)

  • 确保如果 postmaster 进程死亡,正在 await 条件变量的子进程将立即退出(Tom Lane)

  • 使用多个 Gather 节点(Thomas Munro)修复并行查询中的崩溃

  • 修复在处理已删除或半死索引页时在并行索引扫描中挂起的问题(Amit Kapila)

  • 如果并行位图堆扫描无法分配共享内存段,请避免崩溃(Robert Haas)

  • 应对无法启动并行工作进程的问题(Amit Kapila,Robert Haas)

如果fork()失败或其他低概率问题导致无法启动工作程序,则并行查询以前倾向于无限期地挂起。

  • 当在并行查询启动期间无法获得并行工作程序时,避免不必要的失败(Robert Haas)

  • 修复来自并行工作者的EXPLAIN统计信息的收集(阿米特·卡皮拉,托马斯·蒙罗)

  • 确保传递给并行工作程序的查询字符串正确以空值结尾(Thomas Munro)

这样可以防止在此类工作人员的 postmaster 日志输出中发出垃圾。

  • 使用__int128(Tom Lane)时,请避免不安全的对齐假设

通常,编译器假定__int128变量在 16 个字节的边界上对齐,但是我们的内存分配基础结构不准备保证这一点,并且出于多种原因,增大 MAXALIGN 的设置似乎是不可行的。调整代码以仅在我们可以告诉编译器假设较小的对齐方式时才允许使用__int128。到目前为止,此问题的唯一已知症状是某些并行聚合查询崩溃。

  • 计划极深嵌套的 set 操作(UNION/INTERSECT/EXCEPT)(Tom Lane)时,防止堆栈溢出崩溃

  • 避免在 EvalPlanQual 重新检查作为合并联接的内部子项(Tom Lane)的索引扫描的过程中崩溃

只有在同时更新某些选定行的情况下,才可能在连接的更新或SELECT FOR UPDATE期间发生这种情况。

  • 修复了为表定义了扩展统计但无法计算的情况下自动真空崩溃的问题(ÁlvaroHerrera)

  • 修复出现在pg_hba.conf(Thomas Munro)中的某些类型的 LDAP URL 的空指针崩溃

  • 防止由于简单哈希表的过度增长而导致内存不足故障(Tomas Vondra,Andres Freund)

  • 修复 PL/pgSQL 文档中的示例INSTR()函数(Yugo Nagata,Tom Lane)

这些功能据说与 Oracle®兼容,但并不完全相同。特别是,在负的第三个参数的解释上存在差异:Oracle 认为负值表示目标子字符串可以开始的最后位置,而我们的函数将其作为目标子字符串可以结束的最后位置。同样,Oracle 为第四个参数为零或负数引发错误,而我们的函数返回零。

示例代码已进行了调整,以更精确地匹配 Oracle 的行为。已将此代码复制到其应用程序中的用户可能希望更新其副本。

  • 修复 pg_dump 以使 ACL(权限),Comments 和安全标签条目能够可靠地以归档输出格式(Tom Lane)进行标识

ACL 存档条目的“标签”部分通常只是关联对象的名称。而是使其从对象类型开始,使 ACL 与已经用于 Comments 和安全标签归档条目的约定保持一致。此外,修复整个数据库的 Comments 和安全标签条目(如果存在),以使其标签以DATABASE开头,以便它们也遵循此约定。这样可以通过查看标记是否以LARGE OBJECT开头来防止试图识别与大对象相关的条目的代码中出现错误匹配。这可能会导致将条目错误地分类为数据而不是模式,从而导致仅模式或仅数据转储中出现不良结果。

请注意,此更改在pg_restore --list的输出中具有用户可见的结果。

  • 重命名 pg_rewind 的copy_file_range函数,以避免与该名称的新 Linux 系统调用冲突(Andres Freund)

此更改可防止使用较新的 glibc 版本导致构建失败。

  • 在 ecpg 中,检测长度不正确的 Metrics 数组并报告错误(David Rader)

  • 更改contrib/cubecube ~> int运算符的行为,使其与 KNN 搜索兼容(Alexander Korotkov)

第二个参数(尺寸 selectors)的含义已更改,即使在处理多维尺寸的多维数据集时,也可以预测选择哪个值。

这是不兼容的更改,但是由于运算符的点将在 KNN 搜索中使用,因此按原样看似毫无用处。安装此更新后,将需要重新索引/刷新使用此运算符的任何表达式索引或实例化视图。

  • 避免在contrib/hstore中触发 libcassert,因为将memcpy()与相等的源指针和目标指针一起使用(Tomas Vondra)

  • 修复了contrib/pageinspect中 Tuples 的空位图的不正确显示(Maksim Milyutin)

  • 修复contrib/pageinspecthash_page_items()函数的错误输出(泽田正彦)

  • contrib/postgres_fdw中,在构造涉及远程联接的计划时,请避免“外部路径键与合并子句不匹配”计划器错误(Robert Haas)

  • contrib/postgres_fdw中,当有重复的GROUP BY条目时避免计划程序失败(Jeevan Chalke)

  • 提供有关如何在 macOS(Tom Lane)上自动启动 Postgres 的现代示例

contrib/start-scripts/osx中的脚本使用的基础架构已被弃用了十年以上,并且在过去几年的 macOS 版本中根本不再起作用。添加一个新的子目录contrib/start-scripts/macos,其中包含使用较新启动的基础结构的脚本。

  • 修复错误选择 Windows 上的 OpenSSL 配置特定的库(Andrew Dunstan)

  • 支持链接到 MinGW 构建的 libperl 版本(Noah Misch)

这允许使用 Windows 的一些常见 Perl 发行版来构建 PL/Perl。

  • 修复 MSVC 构建以测试 32 位 libperl 是否需要-D_USE_32BIT_TIME_T(Noah Misch)

可用的 Perl 发行版与期望的内容不一致,并且缺少任何可靠的报告方式,因此请对生成的库实际使用的功能进行构建时测试。

  • 在 Windows 上,请在邮局主管启动时更早地安装崩溃转储处理程序(Takayuki Tsunakawa)

这可以允许收集核心转储,以解决一些之前没有产生转储的早期启动故障。

  • 在 Windows 上,避免在邮局主管启动初期发出消息时避免与编码转换相关的崩溃(Takayuki Tsunakawa)

  • 在 OpenBSD 和 NetBSD 上使用我们现有的 Motorola 68K 自旋锁代码(David Carlier)

  • 添加对 Motorola 88K 上的自旋锁的支持(David Carlier)

  • 将时区数据文件更新为 tzdata 版本 2018c,以适应巴西,圣多美和普林西比(PST)的 DST 法律变更,以及玻利维亚,日本和南苏丹的历史更正。 US/Pacific-New区域已被删除(无论如何,它只是America/Los_Angeles的别名)。