PostgreSQL 每周新闻 - 2021 年 5 月 9 日

发布于 2021-05-10,作者 PWN
PWN

PostgreSQL 每周新闻 - 2021 年 5 月 9 日

本周人物:https://postgresql.life/post/dave_page/

PostgreSQL 产品新闻

pgBackRest 2.33 发布,这是一个用于 PostgreSQL 的备份和恢复系统。https://pgbackrest.org/release.html#2.33

pg_probackup 2.4.15 发布,这是一个用于管理 PostgreSQL 数据库集群备份和恢复的实用程序。https://github.com/postgrespro/pg_probackup/releases/tag/2.4.15

五月份的 PostgreSQL 工作

https://archives.postgresql.org/pgsql-jobs/2021-05/

PostgreSQL 新闻

Planet PostgreSQL: https://planet.postgresql.org/

本周的 PostgreSQL 每周新闻由 David Fetter 为您带来

请在太平洋标准时间/太平洋夏令时间周日下午 3:00 前将新闻和公告发送至 david@fetter.org。

已应用的补丁

Alexander Korotkov 推送了

Amit Kapila 推送了

Peter Eisentraut 推送了

Tom Lane 推送了

  • 修复新正则表达式匹配所有检测代码中的性能问题。提交 824bf7190 引入了对正则表达式编译生成的 NFA 的新搜索。我没有认真考虑该搜索的性能特征,可以预见的结果是它很糟糕:奇怪的正则表达式可能会触发指数搜索时间。更糟糕的是,该代码中没有中断检查,因此如果发生这种情况,您甚至无法取消查询。通过引入搜索结果的记忆化来修复,以便任何一个 NFA 状态只需详细检查一次。这可能会使用大量内存,但是我们可以通过限制我们将尝试证明匹配所有性的状态数量来限制内存使用。这是合理的,因为我们已经对匹配所有正则表达式可以匹配的最大有限字符串长度进行了限制 (DUPINF);并且涉及比 DUPINF 状态多得多的模式可能会超出该限制。此外,重新排列逻辑,以便在开始递归搜索以确定路径长度之前,我们检查基本的图是否全是 RAINBOW 弧的属性。这将确保在 NFA 不可能匹配所有时我们快速退出。此外,为了防止这些措施不能完全消除速度缓慢的风险,请添加中断检查。讨论:https://postgr.es/m/3483895.1619898362@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/f68970e33f4dc48094c24c78c452ad730ae9ae12

  • 禁用缓存覆盖以避免破坏 postgres_fdw 终止测试。提交 93f414614 改进了一个预先存在的测试用例,以便显示是否发生了“远程”工作进程的终止。这很快暴露出,当启用 debug_invalidate_system_caches_always(以前为 CLOBBER_CACHE_ALWAYS)时,不会发生此类终止。那是因为缓存失效强制 postgres_fdw 连接在事务结束时被删除,因此没有要终止的工作进程。在我们在查找之前工作进程是否设法退出 BackendStatusArray 存在竞争条件,但至少在 buildfarm 成员 hyrax 上,它在两次尝试中失败了两次。与其重新限制测试,不如通过暂时禁用 debug_invalidate_system_caches_always 来修复此问题。(可喜的是,这现在只是一个 GUC,而不是编译时选项。)如果事实证明这不足以使测试稳定,我们可以改为执行另一件事。讨论:https://postgr.es/m/3854538.1620081771@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/1273a15bf91fa322915e32d3b6dc6ec916397268

  • Doc:改进和集中 OID 别名类型的文档。以前,关于类型 regclass 的许多信息仅存在于序列函数的讨论中。也许一开始这样做是有道理的,因为我认为最初那些是唯一采用 regclass 的函数。但是它不再有意义了。将该材料移至 datatype.sgml 中的“对象标识符类型”部分,将其概括为也谈论其他 reg* 类型,并添加更多示例。根据 Federico Caselli 的错误 #16991。讨论:https://postgr.es/m/16991-bcaeaafa17e0a723@postgresql.org https://git.postgresql.org/pg/commitdiff/f33a178a34809a2bae7a5f4c00984d87771f4204

  • Doc:更新 RELEASE_CHANGES 清单。更新清单以反映当前实践:特定于平台的 FAQ 文件早已消失。我们也没有定期更新我们借用的 libbind 代码,现在似乎也没有理由开始了。解释每个周期运行两次 pgindent 的当前实践。讨论:https://postgr.es/m/4038398.1620238684@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e8ce68b0b9ae2757c6153a88bf869904d2d5ac0b

  • 文档:微小的措辞调整。根据 David Johnston 的建议,改进了自引用外键示例。讨论:https://postgr.es/m/CAKFQuwZTke7+HUn4YUGqu2+gAPi4Cy18TXMrg_Z5nADkxfPNMw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c38cadc0907a8d071b043b2b32b83efa09db38ea

  • 文档:针对 debug_invalidate_system_caches_always 描述的文字编辑。我最初是想修复“useful only useful”,但当我仔细查看文本时,发现有更多可以改进的地方。https://git.postgresql.org/pg/commitdiff/f9b809e7fbe36cd3fe1ce33edb277288a31da386

  • 使 guc.c 和 postgresql.conf.sample 与 SGML 文档同步。似乎有人在 config.sgml 列表中移动了 GUC,而没有费心使代码与之保持一致。确保分配给 GUC 的 config_group 代码与它们在 config.sgml 中的列出位置相匹配。同样,确保 postgresql.conf.sample 列出的 GUC 与它们在 config.sgml 中出现的子部分和顺序相同。(我对其中一些选择有些疑问,但就此补丁而言,我们将 config.sgml 视为权威。)值得注意的是,这需要添加一个 WAL_RECOVERY config_group 值,因为 1d257577e 没有这样做。既然无论如何我们都要重新编号该枚举,那就删除与分为子组的主要组相对应的值。不应将任何 GUC 分配给主要组本身,因此这些值只会产生做错事的诱惑,同时增加翻译人员的工作量。顺便说一下,调整 PRESET_OPTIONS GUC 的 short_desc 字符串,统一使用短语“Shows XYZ.”,消除其中一些字符串给人的可以设置该值的印象。虽然其中一些错误是旧的,但没有反向移植,因为更改稳定分支中 pg_settings 视图的内容似乎比任何有帮助的事情都更可能被视为兼容性破坏。Bharath Rupireddy,Justin Pryzby,Tom Lane 讨论:https://postgr.es/m/16997-ff16127f6e0d1390@postgresql.org 讨论:https://postgr.es/m/20210413123139.GE6091@telsasoft.com https://git.postgresql.org/pg/commitdiff/a55a98477b690dedb9b4368d7e5710c8e7fa534e

Robert Haas 推送

Bruce Momjian 推送

Álvaro Herrera 推送

Andres Freund 推送

Peter Geoghegan 推送

Thomas Munro 推送

Tomáš Vondra 推送

Andrew Dunstan 推送

Michaël Paquier 推送

David Rowley 推送

  • 移动结果缓存代码的内存核算断言。在 9eacee2e6 中,我包含了一些代码,通过计算条目数量和每次从缓存中逐出内容时它们使用的内存来验证缓存的内存跟踪是否正确。然后使用断言将这些值与预期值进行比较。问题是这需要在每次从缓存中逐出条目时循环遍历整个缓存哈希表。正如 Pavel Stehule 指出的那样,这可能会非常耗费资源。在这里,我们移动了此内存核算检查代码,以便我们仅在关闭结果缓存节点时在 cassert 构建上验证一次。除了性能提升之外,这还有两个明显的优势:1) 我们在销毁缓存之前的最后一刻进行内存检查。这意味着我们现在可以捕获可能在缓存逐出后悄然发生的核算问题。2) 我们现在在没有缓存逐出的情况下进行内存断言检查。这增加了覆盖率。一个小缺点是,我们现在将错过任何在执行结束时以某种方式自行解决的内存跟踪问题。然而,在我看来,这样的内存跟踪问题不太可能发生,而且如果存在,可能造成的危害也会小一些。顺便提一下,调整哈希表上的循环以使用标准的 simplehash.h 迭代方法。报告者:Pavel Stehule 讨论:https://postgr.es/m/CAFj8pRAzgoSkdEiqrKbT=7yG9FA5fjUAP3jmJywuDqYq6Ki5ug@mail.gmail.com https://git.postgresql.org/pg/commitdiff/92c4c269d24d016c19858a21347ff25a7de1f486

待处理的补丁

Aleksander Alekseev 发送了另一个补丁修订版,以允许 CustomScan 节点发出投影支持信号。

Melanie Plageman 发送了另一个补丁修订版,以避免为刚刚构建的索引立即进行 fsync。

Dilip Kumar 发送了两个补丁修订版,以添加 TOAST 压缩方法选项。

Vigneshwaran C 发送了另外四个补丁修订版,以在 CREATE/ALTER SUBSCRIPTION 期间识别发布者中缺少的发布。

Bertrand Drouvot 发送了一个补丁,旨在通过精确复制源数据库中的 oldestXid 限制来修复 pg_upgrade 可能导致高事务负载数据库提前回绕的错误。

Bertrand Drouvot 发送了一个补丁,旨在通过添加一个由新的 UseDirtyCatalogSnapshot 变量控制的新目录快照 DirtyCatalogSnapshot,并使用它来检查正在进行的依赖关系并获取对象的描述以生成错误消息来修复孤立依赖关系的错误。

Thomas Munro 发送了另一个补丁修订版,以在 src/test/recovery 下添加一个新的 TAP 测试,以使用正在重放 WAL 的流式副本运行标准回归测试。这为 WAL 解码和重做代码提供了一个基本练习。

Mark Dilger 发送了两个补丁修订版,以扩展 amcheck 以检查 TOAST 大小和压缩。

Jeff Davis 发送了一个补丁,以一种系统其他部分预期的方式绑定表 AM 中的 ItemPointer。

Dilip Kumar 和 Kyotaro HORIGUCHI 交换了补丁,旨在修复恢复中的竞争条件错误。

Craig Ringer 发送了另一个补丁修订版,以简化使用 make USE_VALGRIND=1 的 Valgrind 运行。

David Fetter 发送了一个补丁,以澄清 pg_constraint 中的一些列描述。

Vigneshwaran C 发送了另外两个补丁修订版,以打印指定 postgres 进程的回溯。

Craig Ringer 发送了一个补丁,以便在禁用时为 probes.d 探测发出虚拟语句。

Jeff Davis 发送了另一个补丁修订版,以实现 ALTER TABLE ... SET ACCESS METHOD。

Amit Langote 发送了一个补丁,以澄清 ALTER TABLE ... DETACH PARTITION CONCURRENTLY 的文档。

Etsuro Fujita 发送了一个补丁,以修复 async capable 节点的 EXPLAIN ANALYZE。

Etsuro Fujita 发送了一个补丁,以描述 FDW 的异步执行方式。

Nitin Jadhav 发送了一个补丁,以实现多列的列表分区。

Yugo Nagata 发送了另一个补丁修订版,以实现增量视图维护。

Konstantin Knizhnik 发送了另一个补丁修订版,以删除不必要的自连接。

Andrey Borodin 发送了另一个补丁修订版,以加速 GiST 索引构建。

Etsuro Fujita 发送了一个补丁,通过修改 postgresPlanDirectModify() 以便在设置时清除异步功能标志来修复继承的 UPDATE/DELETE 和异步执行之间的不便之处。

James Coleman 发送了一个补丁,以并行化在每个工作进程中执行的相关子查询。

Jeff Janes 发送了一个补丁,以在致命检查之前添加配置缓存检查点。

Hou Zhijie 发送了另一个补丁修订版,以修复 EXPLAIN 关于 FDW 批量插入的信息。

Erik Rijkers 和 Alexander Korotkov 交换了补丁,以改进 JSON 路径查询中的示例,以突出显示实际发生的事情。

Bruce Momjian 发送了另一个补丁修订版,以修复间隔算术中的错误行为。

Hou Zhijie 发送了一个补丁,以修复当 fdw batch_size 设置为 0 时出现错误消息不准确的错误。

David Rowley 发送了另一个补丁修订版,以加速使用一组 Consts 的 NOT IN()。

Andrew Dunstan 发送了另一个补丁修订版,以实现 SQL/JSON 的 JSON_TABLE 部分。

Andrew Dunstan 发送了另一个补丁修订版,以实现 SQL/JSON 中的函数。

Tom Lane 发送了一个补丁,以使 C 函数具有二进制强制转换功能,以便在 CLOBBER_CACHE_ALWAYS 下减少 opr_sanity 测试的运行时。

David Rowley 发送了一个补丁,仅在计划关闭时验证 resultcache 内存。

Vigneshwaran C 发送了一个补丁,以更正逻辑复制消息格式的数据类型。