E.7. 11.2 版

发布日期: 2019-02-14

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

E.7.1. 迁移到版本 11.2

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

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

E.7.2. Changes

  • 默认情况下,在发生fsync()失败后应紧急而不是重试,以避免可能的数据损坏(Craig Ringer,Thomas Munro)

一些流行的 os 在无法写出内核数据缓冲区时将其丢弃,并报告为fsync()失败。如果我们重新发出fsync()请求,它将成功,但实际上数据已丢失,因此 continue 存在数据库损坏的风险。通过引发紧急情况,我们可以从 WAL 中重播,WAL 在这种情况下可能仅包含数据的剩余副本。尽管这确实很丑陋且效率低下,但几乎没有其他选择,而且幸运的是,这种情况很少发生。

已添加新的服务器参数data_sync_retry来控制此参数;如果确定在这种情况下内核不会丢弃脏数据缓冲区,则可以将data_sync_retry设置为on以恢复旧的行为。

  • 仅在该分支的文档中包含每个主要发行分支的发行说明,而不是该分支以及所有后续版本的文档(Tom Lane)

先前 Policy 引起的重复已经失控。我们的计划是在项目的网站上提供完整的发行说明存档,但不要在每个发行版本中重复。

  • 使用分区表上的INCLUDE列修复唯一索引的处理(ÁlvaroHerrera)

在这种情况下,无法正确检查唯一性条件。

  • 确保分区表的NOT NULL约束在其分区内得到遵守(ÁlvaroHerrera,Amit Langote)

  • 分离分区时,针对分区表约束正确更新目录状态(Amit Langote,ÁlvaroHerrera)

以前是pg_constraint。此类约束的conislocal字段可能会不正确地保留为false,使其无法放置。转储/恢复或 pg_upgrade 可以解决该问题,但如有必要,可以手动调整目录字段。

  • 在具有外键约束的分区表中附加或分离分区时,正确创建或删除外键强制触发器(Amit Langote,ÁlvaroHerrera)

  • 避免在分区表中无用地创建重复的外键约束(ÁlvaroHerrera)

  • 当使用ONLY在分区表上创建索引并且尚无分区时,请立即将其标记为有效(ÁlvaroHerrera)

否则,将无法使其生效。

  • 分离分区时使用安全的表锁定级别(ÁlvaroHerrera)

先前的锁定级别太弱,可能允许在表上进行并发 DDL,结果不佳。

  • 解决将ON COMMIT DROPON COMMIT DELETE ROWS应用于分区表和具有继承子项的表的问题(Michael Paquier)

  • 在分区表上禁止COPY FREEZE(David Rowley)

最终应该可以使它起作用,但是它可能需要一个过于复杂的补丁程序,以至于无法进行反向修补。

  • 修复了当索引列具有“快速默认值”(即表已包含某些行之后,由ALTER TABLE ADD COLUMN添加且指定了恒定的非 NULL 默认值)时可能发生的索引损坏的问题(Andres Freund)

  • ALTER TABLE ... ALTER COLUMN TYPE(Andrew Dunstan)期间正确调整“快速默认”值

  • 获取多个缓冲区锁(Nishant Fnu)时,避免可能的死锁

  • 避免在 GIN 清除和并发索引插入之间陷入僵局(亚历山大·科罗特科夫,安德烈·鲍罗丁,彼得·乔治海根)

此更改部分还原了版本 10.0 中引入的性能改进,该性能改进试图减少在删除 GIN 发布树页面期间锁定的索引页面的数量。现在发现这会导致死锁,因此我们已将其删除,以进行更深入的分析。

  • 避免在热备份查询和 GIN 索引页删除重播之间陷入僵局(Alexander Korotkov)

  • 修复了在使用索引表达式或谓词时逻辑复制中可能发生的崩溃(Peter Eisentraut)

  • 避免在表重写期间对 TOAST 数据进行无用且昂贵的逻辑解码(Tomas Vondra)

  • 修复了启用同步复制时停止 WAL 发送者子集的逻辑(Paul Guo,Michael Paquier)

  • 避免在 Tuples 删除 WALLogging 写入错误的副本标识字段(Stas Kelvich)

  • 防止在COPY期间对视图或外部表错误地使用 WAL 跳过优化(Amit Langote,Michael Paquier)

  • 使归档程序优先于 WAL 历史文件优先于 WAL 历史文件,同时选择下一个要归档的文件(David Steele)

  • 使用子SELECT作为源,修复带有多个SET子句的UPDATE中可能发生的崩溃(Tom Lane)

  • 修复将零行馈送到json[b]_populate_recordset()json[b]_to_recordset()(Tom Lane)时崩溃的问题

  • 如果 libxml2 返回空错误消息,请避免崩溃(Sergio CondeGómez)

  • 修复多列(大于约 800)的表的不正确的 JITTuples 变形代码(Andres Freund)

  • 修复基于哈希的分组中的性能和内存泄漏问题(Andres Freund)

  • 修复由于排序规则分配处理不一致而导致的虚假分组相关的解析器错误(Andrew Gierth)

在某些情况下,如果应将表达式视为包含匹配数据类型的操作,则它们不会被视为匹配。

  • 修复对CALL语句的参数中区分排序规则的表达式的解析(Peter Eisentraut)

  • 在检测到CALL语句的参数列表中的错误后,请确保正确清理(Tom Lane)

  • 检查LEAST()GREATEST()基础的比较函数是否防漏,而不是仅仅假设它是(Tom Lane)

来自 btree 比较函数的实际信息泄漏通常很难引起,但原则上可能会发生。

  • 修复错误的查询计划,该计划涉及在 Gather 计划节点(Tom Lane)上方和下方的嵌套循环。

如果两个级别的 nestloop 都需要将相同的变量传递到它们的右侧,则将生成错误的计划。

  • 修复错误的查询计划,其中必须在外部表扫描(Tom Lane)中评估横向参考

  • 当行比较的第一列与索引列匹配,但后来的列不匹配且索引包含(非关键)列时,计划程序失败; Tom Lane

  • 修复合并连接的成本低估的情况(Tom Lane)

当外键范围比内键范围小得多时,即使内侧有很多重复的键,所以计划者还是更喜欢合并联接。

  • 当查询包含数千个可索引子句(Tom Lane)时,避免 O(N ^ 2)规划时间增长

  • 提高大型继承或分区表组的计划速度(Amit Langote,Fujita Etsuro)

  • 改进ANALYZE对同时更新的行的处理(Jeff Janes,Tom Lane)

以前,ANALYZE的示例中省略了正在进行的事务删除的行,但是发现这种情况比包含它们会导致更多的不一致。实际上,该 samples 现在对应于ANALYZE开始时间的 MVCC 快照。

  • 使TRUNCATE忽略作为其他会话的临时表的继承子表(Amit Langote,Michael Paquier)

这使TRUNCATE与其他命令的行为保持一致。以前,这种情况通常以失败告终。

  • 修复TRUNCATE,以更新右表(Tom Lane)的统计计数器

如果截断的表具有 TOAST 表,则将重置该表的计数器。

  • 正确处理ALTER TABLE ONLY ADD COLUMN IF NOT EXISTS(Greg Stark)

  • 在热备份模式下允许UNLISTEN(Shay Rojansky)

这一定是禁止操作,因为在热备模式下不允许LISTEN;但是允许虚拟操作简化了 Client 端中的会话状态重置逻辑。

  • 修复某些架构和数据类型权限列表(Tom Lane)中缺少的角色依赖性

在某些情况下,可以将已授予权限的角色删除。这不会立即引起问题,但是随后的转储/重新加载或升级将失败,并且会出现症状,包括尝试向所有数字角色名称授予特权。

  • 防止在两阶段事务中使用会话的临时模式(Michael Paquier)

禁止访问此类事务中的临时表已有很长时间,但是仍然可能导致对临时对象的其他操作出现问题。

  • 添加或删除外键约束后,请确保正确更新关系缓存(ÁlvaroHerrera)

这种疏忽可能导致现有会话无法执行新创建的约束,或者 continue 执行已删除的约束。

  • 重命名约束后,请确保正确更新关系缓存(Amit Langote)

  • 修复了 GiST 索引微真空操作的重播,以便并发热备用查询不会看到不一致的状态(Alexander Korotkov)

  • 防止空 GIN 索引页恢复太快,导致并发搜索失败(Andrey Borodin,Alexander Korotkov)

  • 修复浮点到整数强制中的边缘情况失败(Andrew Gierth,Tom Lane)

略高于最大有效整数值的值可能不会被拒绝,然后溢出,从而产生最小有效整数。同样,应舍入为最小或最大整数值的值可能会被错误地拒绝。

  • pg_hba.conf(Thomas Munro)中的 LDAP 身份验证条目的ldapserver参数中修复主机名的空格分隔列表

  • 发出 PAM 身份验证请求时,如果连接是通过 Unix 套接字(Thomas Munro)进行的,则不要设置PAM_RHOST变量

以前,该变量将设置为[local],这最好是无济于事的,因为它应该是主机名。

  • 禁止将client_min_messages设置为高于ERROR(乔纳·哈里斯,汤姆·莱恩)

以前,可以将此变量设置为FATALPANIC,这具有抑制普通错误消息向 Client 端传输的作用。但是,这与 PostgreSQL 有线协议规范中给出的保证相反,这使某些 Client 端变得非常困惑。在已发布的分支中,通过静默将此类设置视为ERROR来解决此问题。版本 12 及更高版本将完全拒绝这些替代方案。

  • 修复 ecpglib 优先使用uselocale()_configthreadlocale()而不是setlocale()(Michael Meskes,Tom Lane)

由于setlocale()不是线程本地的,甚至可能不是线程安全的,因此先前的编码在多线程 ecpg 应用程序中引起了问题。

  • 修复通过 ecpg SQLDA(SQLDescriptors 区域)传递的数字数据的错误结果(Hi 口大辅)

前导零的值未正确复制。

  • 修复 psql 的\g * target *元命令以与COPY TO STDOUT一起使用(DanielVérité)

以前,* target *选项被忽略,因此复制数据始终转到当前查询输出目标。

  • 使 psql 的 LaTeX 输出格式正确呈现特殊字符(Tom Lane)

反斜杠和其他一些 ASCII 标点符号未正确呈现,从而导致文档语法错误或输出中的错误字符。

  • 当指定--random-seed=N时,使 pgbench 的随机数生成完全确定性且与平台无关(Fabien Coelho,Tom Lane)

在任何特定平台上,使用特定值* N *获得的序列可能与此补丁之前的序列不同。

  • 修复 pg_basebackup 和 pg_verify_checksums 以适当地忽略临时文件(Michael Banck,Michael Paquier)

  • 修复 pg_dump 对物化视图的处理,该方法对主键具有间接依赖性(Tom Lane)

这导致对此类视图的转储归档条目的标签错误,从而导致有关“归档项目的节段 Sequences 不正确”的无害警告。不太有害的是,取决于这些标签的选择性还原选项(例如--section)可能会发生错误的行为。

  • 使 pg_dump 包含ALTER INDEX SET STATISTICS命令(Michael Paquier)

当增加了将统计目标附加到索引表达式的功能时,我们忘了教 pg_dump 了,因此在转储/重新加载中丢失了此类设置。

  • 修复 pg_dump 对具有 OID 的表的转储(Peter Eisentraut)

如果需要将WITH OIDS子句应用于要转储的第一个表,则将其省略。

  • 当 pg_dump 或 pg_restore 尝试报告错误时,避免在某些平台上发生空指针解除引用崩溃(Tom Lane)

  • 防止因内联压缩数据而导致来自contrib/amcheck的错误索引损坏报告(Peter Geoghegan)

  • 如果COPY FROM PROGRAM停止提早读取程序的输出,则正确忽略SIGPIPE错误(Tom Lane)

这种情况实际上无法直接通过COPY解决,但使用contrib/file_fdw可能会发生。

  • 修复contrib/hstore,以计算在版本 8.4 或更早版本中创建的空hstore值的正确哈希值(Andrew Gierth)

先前的编码没有提供与由较新版本创建的空hstore值相同的结果,因此有可能在哈希联接或哈希聚合中导致错误的结果。如果表中可能包含最初存储于 8.4 且此后从未转储/重新加载的数据,则建议对在hstore列上构建的任何哈希索引重新索引。

  • 通过大量 Importingcontrib/intarraygist__int_ops索引支持来避免崩溃和过多的运行时间(Andrew Gierth)

  • 在 configure 中,先找到python3,然后找到python2(如果未找到python)(Peter Eisentraut)

这允许在不再提供未版本化python可执行文件的平台上配置 PL/Python 时,无需显式指定PYTHON

  • 在已安装的头文件集中包含与 JIT 相关的头(Donald Dong)

  • 在 pgxs 版本中支持新的 Makefile 变量PG_CFLAGSPG_CXXFLAGSPG_LDFLAGS(Christoph Berg)

这简化了扩展构建过程的自定义。

  • 修复 Perl 编码的构建脚本,使其不假定“ .”位于搜索路径中,因为最新的 Perl 版本不包括该代码(Andrew Dunstan)

  • 修复 OpenBSD(Tom Lane)上的服务器命令行选项解析问题

  • 重新定位set_rel_pathlist_hook的调用,以便扩展程序可以使用它为并行查询提供部分路径(KaiGai Kohei)

预计这不会影响现有用例。

  • 将时区数据文件更新为 tzdata 版本 2018i,以便在哈萨克斯坦,梅特拉卡特拉,圣多美和普林西比 DST 法律变更。哈萨克斯坦的 Qyzylorda 区一分为二,从而创建了一个新的亚洲/ Qostanay 区,因为某些地区未更改 UTC 偏移量。香港和许多太平洋岛屿的历史性更正。