2025年9月25日: PostgreSQL 18 发布!

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 提供。

请在太平洋标准时间(PST8PDT)周日晚上3:00之前将新闻和公告发送至 david@fetter.org。

已应用补丁

Alexander Korotkov 提交了

Amit Kapila 提交

Peter Eisentraut 提交

Tom Lane 提交

  • 修复新正则表达式匹配所有检测代码中的性能问题。Commit 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 终止测试。Commit 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

  • 文档:改进和集中 OID 别名类型的文档。以前,关于 type regclass 的许多信息仅存在于 sequence functions 的讨论中。也许一开始这是有道理的,因为我认为最初只有那些函数接受 regclass。但这不再合理了。将其移至 datatype.sgml 的“Object Identifier Types”部分,并将其泛化以讨论其他 reg* 类型,并添加更多示例。根据 bug #16991,来自 Federico Caselli。讨论:https://postgr.es/m/16991-bcaeaafa17e0a723@postgresql.org https://git.postgresql.org/pg/commitdiff/f33a178a34809a2bae7a5f4c00984d87771f4204

  • 文档:更新 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 列表中移动了 GUCs,而没有让代码保持一致。确保分配给 GUCs 的 config_group 代码与其在 config.sgml 中的列表位置匹配。同样,确保 postgresql.conf.sample 中的 GUCs 在 config.sgml 中出现的相同子部分和顺序。 (我对其中一些选择有一些疑问,但就此补丁而言,我们将 config.sgml 视为权威。)值得注意的是,这需要添加 WAL_RECOVERY config_group 值,因为 1d257577e 没有。既然我们正在重新编号该枚举,让我们删除对应于被划分为子组的主组的值。不应将 GUC 分配给主组本身,因此这些值会诱使人做错事,同时为翻译人员增加工作量。顺便,调整 PRESET_OPTIONS GUCs 的 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 提交

  • 移动 Result Cache 代码的内存会计断言。在 9eacee2e6 中,我包含了一些代码来验证缓存的内存跟踪是否正确,方法是在每次从缓存中逐出条目时计算条目数量及其使用的内存。然后使用 Assert 将这些值与预期值进行比较。问题是,这需要在每次从缓存中逐出条目时循环遍历整个缓存哈希表。正如 Pavel Stehule 所指出的,这可能非常昂贵。在此,我们将此内存会计检查代码移至 cassert 构建时仅在 Result Cache 节点关闭时验证一次。除了性能提升之外,这还有两个明显的好处:1) 我们在销毁缓存之前的最后一刻进行内存检查。这意味着我们现在将捕获可能在缓存逐出后潜入的会计问题。2) 我们现在在没有缓存逐出时执行内存 Assert 检查。这增加了覆盖范围。一个小的缺点是我们现在会错过任何内存跟踪问题,这些问题不知何故会在执行结束时自行解决。但是,在我看来,这种内存跟踪问题可能非常不可能,并且如果存在,可能危害较小。顺便,调整哈希表上的循环以使用标准的 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 发送了一个补丁,旨在修复一个错误,该错误表现为 pg_upgrade 可能导致具有高事务负载的数据库过早回绕,方法是精确复制源数据库的最旧 XID 限制。

Bertrand Drouvot 发送了一个补丁,旨在修复一个表现为孤立依赖项的错误,方法是添加一个新的 Catalog Snapshot Is DirtyCatalogSnapshot,受新的 UseDirtyCatalogSnapshot 变量控制,并使用它来检查进行中的依赖项并获取对象的描述以生成错误消息。

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

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

Jeff Davis 发送了一个补丁,以将表 AM 中的 ItemPointers 限制在系统的其他部分所期望的方式。

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

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

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

Vigneshwaran C 发送了两个补丁的修订版,以打印指定 postgres 进程的堆栈跟踪。

Craig Ringer 发送了一个补丁,以在 disable 时为 probes.d 探针发出 dummy 语句。

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

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

Etsuro Fujita 发送了一个补丁,以修复 EXPLAIN ANALYZE 对异步能力节点的问题。

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

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

Yugo Nagata 发送了另一个版本的补丁,用于实现增量视图维护。

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

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

Etsuro Fujita 发送了一个补丁,以修复继承的 UPDATE/DELETE 与异步执行之间的不匹配,方法是修改 postgresPlanDirectModify() 以在设置了异步能力标志时清除它。

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

Jeff Janes 发送了一个补丁,以在 fatal 检查之前添加 configure 缓存检查点。

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

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

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

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

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

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

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

Tom Lane 发送了一个补丁,以创建一个二进制可强制转换的 C 函数,以缩短 CLOBBER_CACHE_ALWAYS 下 opr_sanity 测试的运行时间。

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

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