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

PostgreSQL 周刊新闻 - 2020 年 12 月 13 日

发布于 2020-12-14,作者 PWN
PWN

PostgreSQL 周刊新闻 - 2020 年 12 月 13 日

本周 PostgreSQL 人物:https://postgresql.life/post/carole_arnaud/

12 月 PostgreSQL 工作岗位

http://archives.postgresql.org/pgsql-jobs/2020-12/

PostgreSQL 相关新闻

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

本周 PostgreSQL 周报由 David Fetter 提供。

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

已应用补丁

Michaël Paquier 提交

  • 修复 pg_verifybackup 中的文件描述符泄露。87ae969 新引入的一个错误路径在验证文件校验和时忘记关闭文件描述符。来自 Coverity 的报告,经 Tom Lane 转述。https://git.postgresql.org/pg/commitdiff/51c388987734cb318c8fa875f382ca75a34d0010

  • 避免使用 syscache 中的元组来更新 pg_database.datfrozenxid。pg_database.datfrozenxid 在 vacuum 或 autovacuum 结束时使用原地更新进行更新。自 96cdeae 起,由于 pg_database 有一个 toast 关系,如果存在大量 ACL,pg_database 元组可能会有 toast 值。在这种情况下,原地更新将因 catcache 条目获取的 toast 值展平而失败。此更改将逻辑改为直接扫描 pg_database 来获取元组副本,而不是使用 catcache 的副本。据此,没有收到相关投诉,因此没有进行回溯补丁。请注意,在 96cdeae 之前,尝试将此类元组插入 pg_database 会导致“行太大”的错误,因此不会出现 end-of-vacuum 问题。作者:Ashwin Agrawal、Junfeng Yang 讨论:https://postgr.es/m/DM5PR0501MB38800D9E4605BCA72DD35557CCE10@DM5PR0501MB3880.namprd05.prod.outlook.com https://git.postgresql.org/pg/commitdiff/947789f1f5fb61daf663f26325cbe7cad8197d58

  • pgcrypto:检测 OpenSSL 的 EVP 调用错误。pgcrypto 在处理摘要时会调用以下例程,但没有检查失败:- EVP_MD_CTX_size(从 3.0.0 起可能返回 -1)- EVP_MD_CTX_block_size(从 3.0.0 起可能返回 -1)- EVP_DigestInit_ex - EVP_DigestUpdate - EVP_DigestFinal_ex 此提交添加了一系列 elog(ERROR) 来检测此类失败,除非 OpenSSL 内部处理失败,否则这些失败永远不会发生。请注意,可以使用 ERR_reason_error_string() 获取有关这些错误的更多上下文,但这些主要涉及 OpenSSL 的内部细节,因此其有用性并不明显。为简化起见,此处省略。来自 Coverity 的报告。感谢 Tom Lane 的讨论。回溯至:9.5 https://git.postgresql.org/pg/commitdiff/28d1601ad988790c3c53d7ffd24ef6d2366d4457

  • 简化获取 Unicode 码点的规范类别的代码。unicode_norm.c 中的三个位置使用类似的逻辑从码点获取组合类。提交 2991ac5 为此目的添加了 get_canonical_class() 函数,但该函数仅由后端调用。此提交重构代码,以便在所有检索给定码点的组合类的地方都使用此函数。作者:John Naylor 讨论:https://postgr.es/m/CAFBsxsHUV7s7YrOm6hFz-Jq8Sc7K_yxTkfNZxsDV-DuM-k-gwg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/16c302f51235eaec05a1f85a11c1df04ef3a6785

  • 根据新的 cryptohash 基础结构重构 MD5 实现。此提交在多个方面重组了树中存在的 MD5 实现。首先,MD5 被添加到 cryptohash.c 和 cryptohash_openssl.c 中可用选项的列表中。这意味着,如果使用 OpenSSL 构建,MD5 将使用 EVP,而不是 PostgreSQL 长期以来使用的回退实现。随着最近对 cryptohash 函数的重构工作,此更改很简单。如果未使用 OpenSSL 构建,则使用 src/common/ 中的内部回退实现。其次,通过将 KAME 实现从 pgcrypto 移动到 src/common/,并移除 src/common/ 中存在的实现,将树中的 MD5 实现数量从两个减少到一个。KAME 已经由 pgcrypto (参见原始 pgcrypto/md5.h) 按 init/update/final 例程的结构进行了组织,以兼容 OpenSSL,因此将其移动到 src/common/ 被证明是一个简单的举动,不需要对每个例程的内部进行实际操作。一些基准测试并未显示两种实现之间存在性能差距。与 SHA2 的回退实现类似,MD5 的回退实现被移至 src/common/md5.c,并使用一个名为 md5_int.h 的内部头文件来处理 init、update 和 final 例程。然后,cryptohash.c 会消耗这些。用于 MD5 哈希密码的原始例程被移到一个名为 md5_common.c 的单独文件(也在 src/common/ 中),旨在与所有 MD5 实现共享,作为实用例程,以保持与依赖它们的任何代码的兼容性。与 SHA2 更改类似,此提交在 Linux 和 Windows 上进行了测试,测试范围涵盖了 HEAD 上支持的所有 OpenSSL 版本,无论是否使用 OpenSSL。作者:Michael Paquier 审阅者:Daniel Gustafsson 讨论:https://postgr.es/m/20201106073434.GA4961@paquier.xyz https://git.postgresql.org/pg/commitdiff/b67b57a966af0c4a9547ac6fff334d3c256d9c2a

  • 修复 uuid-ossp 的编译。此模块依赖于 pgcrypto 的 md5.c,而 b67b57a 已将其移除。此代码可以直接使用新的 MD5 cryptohash 例程作为替换,从而简化 uuid-ossp 的编译。这需要重新生成 --with-uuid,我使用 e2fs 来重现此失败,然后测试此提交。来自 buildfarm 成员 longfin、florican 和 sifaka 的报告。讨论:https://postgr.es/m/X9GToVd3QmWeNvj8@paquier.xyz https://git.postgresql.org/pg/commitdiff/525e60b7429925d09fce1b5aa0bc2f23cfe6dd18

Tom Lane 提交

  • pg_dump:重组 dumpBaseType()。与 ed2c7f65b 和 daa9fe8a5 类似,通过只保留一部分在所有服务器版本中相同的查询,减少代码重复;并使条件语句控制尽可能小的代码量。这是为向 pg_type 添加另一个可转储字段做准备。https://git.postgresql.org/pg/commitdiff/04732962462ba99cf8f8bcf6ac83932867cc96a8

  • 添加几个与数组下标相关的回归测试用例。测试一些在现有回归测试中从未达到过的错误情况。部分原因是为了代码覆盖率,部分原因是在计划对通用下标进行更改之前记录当前行为。另外,我注意到 type_sanity 验证所有标准类型都有数组类型的检查从未在添加所有系统目录行类型的数组 (f7f70d5e2) 或添加域类型数组 (c12d570fa) 时得到扩展。因此,我做了这些。此外,由于查询的预期输出不为空,因此添加 ORDER BY 以确保结果保持稳定似乎是个好主意。https://git.postgresql.org/pg/commitdiff/0a665bbc43c5a678331fb1b1f44274500eba6563

  • 文档:解释字符串类型不能存储 \0 (ASCII NUL)。此限制在与字符串字面量连接时被提及,但并未明确说明这是否是一般限制,而不仅仅是查询字符串中的语法限制。根据未签名文档注释。讨论:https://postgr.es/m/160720552914.710.16625261471128631268@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/9a2641911aeaa7f6523dc2a465088051d4c85901

  • 文档:澄清 CREATE TABLE 会丢弃冗余的唯一约束。SQL 标准规定不允许出现冗余的唯一约束,但我们很早就决定抛出错误对用户来说过于不友好,因此我们只丢弃冗余的约束。文档对此的说明并不十分清晰,因为此行为仅针对 PRIMARY KEY vs UNIQUE 进行了解释,而不是 UNIQUE vs UNIQUE。在此期间,我忍不住对有关 INCLUDE 选项的相邻文本进行了一些文字编辑和标记修复。根据 Matthias vd Meent 的 bug #16767。讨论:https://postgr.es/m/16767-1714a2056ca516d0@postgresql.org https://git.postgresql.org/pg/commitdiff/f2a69b352de1dffc534c4835010e736018aa94de

  • 移除 operator_precedence_warning。此 GUC 一直是临时解决方案,旨在帮助查找 9.4 到 9.5 的迁移问题。现在所有 9.5 之前的分支都已停止支持,并且在 v14 发布之前 9.5 也将停止支持,因此移除它似乎是合适的。这样做可以移除 parse_expr.c 中数千行测试不充分的代码,这些代码在人们使用此功能时一直是错误的温床。讨论:https://postgr.es/m/2234320.1607117945@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/a676386b58bf7cd2df81baa43eb1713d3a2ec055

  • 教会 contain_leaked_vars 赋值下标引用是泄露的。array_get_element 和 array_get_slice 符合 leakproof(不会静默返回 NULL),因为它们对于无效的下标会静默返回 NULL。但 array_set_element 和 array_set_slice 会对此类情况抛出错误,因此它们显然不符合 leakproof。contain_leaked_vars 显然只考虑了前一种情况,因为它对赋值下标引用(以前称为 ArrayRefs)给出了错误的答案。这可能是一个实际的安全漏洞,如果不是因为赋值下标引用只能出现在 INSERT 和 UPDATE 的目标列表中,而我们只关心 qual 表达式的 leakproof 性;因此错误答案在实践中不会出现。尽管如此,对于一个与安全相关的查询来说,这是一个相当不确定的答案;也许将来有人会想询问 tlist 的 leakproof 性。因此,修复它并进行回溯补丁似乎是明智的。(对于即将到来的通用下标补丁,我们无论如何都需要在这里进行一些更改,因为扩展可能会在是否抛出错误方面做出不同的权衡。Commit 558d77f20 试图通过询问 check_functions_in_node 是否 SubscriptingRef 包含 leaky 函数来为该目标奠定基础;但这个想法现在失败了,因为 SubscriptingRef 的实现方法不是 SQL 可见的函数,可以标记为 leakproof 或不 leakproof。)回溯至 9.6。虽然 9.5 存在同样的问题,但代码略有不同。考虑到 9.5 剩余的生命周期很短,工作/风险/回报的平衡对于更改 9.5 来说吸引力不大。讨论:https://postgr.es/m/3143742.1607368115@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/62ee70331336161cb44733b6c3e0811696d962aa

  • 支持任意类型的下标,而不仅仅是数组。此补丁将下标基础结构通用化,以便任何数据类型都可以被下标,前提是它提供了处理函数来定义其含义。传统的变长(varlena)数组都使用 `array_subscript_handler()`,而现有的支持下标的定长类型使用 `raw_array_subscript_handler()`。预计其他希望使用下标表示法的数据类型将定义自己的处理函数。(尽管此补丁不提供任何此类新功能;它仅为它们奠定基础。)为此,将下标的解析器语义处理(包括强制转换为所需数据类型)移至处理函数提供的回调方法。在执行方面,用对回调提供的执行例程的直接调用替换 `ExecEvalSubscriptingRef*` 函数层。(因此,此补丁实际上不会导致新的运行时开销。事实上,通过提供专门的执行例程,可以减少一些开销。此补丁在这方面做了一些工作,但还有更多工作可以做。)需要在此处和此处进行额外工作,以移除先前硬编码的关于 SubscriptingRef 表达式节点的返回类型、排序规则等假设;并移除下标值必须是整数的假设。一个有用的副作用是,我们现在有了一个不那么模糊的机制来确定数据类型是否是“真正”的数组:而不是硬编码关于 typlen 的奇怪规则,我们可以查看 pg_type.typsubscript 是否等于 `F_ARRAY_SUBSCRIPT_HANDLER`。为了使其万无一失,我们必须禁止用户定义类型直接使用该处理函数;但似乎没有充分的理由让他们这样做。此补丁还消除了下标数量限制为 MAXDIM (6) 的假设,甚至没有任何硬编码限制。该限制仍然适用于由 `array_subscript_handler` 或 `raw_array_subscript_handler` 处理的类型,但为了劝阻对此常量的其他依赖,我已将其从 c.h 移至 utils/array.h。Dmitry Dolgov,由 Tom Lane、Arthur Zakirov、Peter Eisentraut、Pavel Stehule 在不同时间审阅 讨论:https://postgr.es/m/CA+q6zcVDuGBv=M0FqBYX8DPebS3F_0KQ6OVFobGJPM507_SZ_w@mail.gmail.com 讨论:https://postgr.es/m/CA+q6zcVovR+XY4mfk-7oNk-rF91gH0PebnNfuUjuuDsyHjOcVA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c7aba7c14efdbd9fc1bb44b4cb83bedee0c6a6fc

  • 允许 ALTER TYPE 更新现有类型的 typsubscript 值。这对于我们希望允许现有扩展数据类型在未来支持下标至关重要,因为对于扩展升级脚本来说,删除和重新创建类型并不可行,而直接操作 pg_type 也不是一个好方法。关于也允许修改 typelem 的一些讨论,但其是否是一个好主意尚不清楚,因此暂时搁置。讨论:https://postgr.es/m/3724341.1607551174@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/8c15a297452e970d68529ee2ce6bd94d84598409

  • 为“无法下标”的错误消息提供错误游标。Commit c7aba7c14 未添加此功能,但在进一步试验该功能后,我认为它很有用。为了实现这一点,重构 getSubscriptingRoutines(),使其调用者负责抛出任何错误。(在 clauses.c 中,我选择做出最保守的假设,而不是抛出错误。我们实际上不期望在那里出现故障,因此错误消息的代码空间并不是一个好的投资。)https://git.postgresql.org/pg/commitdiff/653aa603f501aa6e4865105a928cd13082ee7152

  • 允许下标 hstore 值。这基本上是一个练习,旨在证明扩展模块可以添加下标能力。从 hstore 中下标获取与现有的“hstore -> text”运算符没有区别。下标更新似乎比使用 hstore 连接的传统更新方法更容易使用,但它并非根本性的新能力。然而,代码可能有一些价值,因为它展示了当不需要考虑嵌套容器对象时,实现下标的最简化方式。讨论:https://postgr.es/m/3724341.1607551174@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/0ec5f7e78231a621a1d96c4bfedc4a1849a6c6cc

Heikki Linnakangas 提交

Andres Freund 提交

Fujii Masao 提交

  • 为 pg_stat_wal 更改更新 catversion。01469241b2 中的疏忽。报告者:Andres Freund 讨论:https://postgr.es/m/20201207185614.zzf63vggm5r4sozg@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/4e43ee88c28b725bb63e27609c1a717138fc7f39

  • 加快 autovacuum 中重新检查关系是否需要 vacuum 或 analyze 的速度。autovacuum 收集需要 vacuum 或 analyze 的关系后,在实际执行之前会重新检查每种关系是否仍需要 vacuum 或 analyze。以前,这种重新检查可能是一个显著的开销,尤其是在关系数量非常多的时候。这是因为每次重新检查都会强制刷新统计信息,而刷新大量关系的统计信息可能会导致巨大的开销。有报告称此问题导致 autovacuum 工作进程在 table_recheck_autovac() 的一个紧密循环中“卡住”,该循环会重新检查关系是否需要 vacuum 或 analyze。此提交通过允许 autovacuum 工作进程在可能的情况下重用先前读取的统计信息来加快重新检查速度。然后,如果该“过时”统计信息表明关系仍需要 vacuum 或 analyze,autovacuum 会刷新统计信息并再次进行重新检查。基准测试表明,关系越多,autovacuum 工作进程并发运行越多,此更改就越能减少 autovacuum 的执行时间。例如,当有 20,000 张表且有 10 个 autovacuum 工作进程运行时,基准测试显示该更改使 autovacuum 的性能提高了三倍多。另一方面,即使只有 1000 张表且只有一个 autovacuum 工作进程运行时,基准测试也没有显示该更改会造成任何大的性能回归。首先,POC 补丁由 Jim Nasby 提出。讨论结果是,我们使用了 Tatsuhito Kasahara 的补丁版本,该版本采用了 Tom Lane 建议的方法。报告者:Jim Nasby 作者:Tatsuhito Kasahara 审阅者:Masahiko Sawada、Fujii Masao 讨论:https://postgr.es/m/3FC6C2F2-8A47-44C0-B997-28830B5716D0@amazon.com https://git.postgresql.org/pg/commitdiff/e2ac3fed3b1c3281281eb530c220634030cd8084

Dean Rasheed 已推送

Peter Eisentraut 提交

Bruce Momjian 已推送

Noah Misch 推送

待处理补丁

Bharath Rupireddy 提交了一个补丁,允许在 REFRESH MATERIALIZED VIEW 规划中使用并行模式。

James Coleman 提交了一个补丁,允许并行 LATERAL 子查询使用 LIMIT/OFFSET。

Peter Eisentraut 提交了一个 WIP 补丁,用于修复 temp-install 测试以支持 macOS SIP。

Pavel Stěhule 提交了另一个修订版本的补丁,该补丁添加了一个 unistr 函数,用于评估各种形式的 unicode-转义字符。

Bruce Momjian 提交了另外两个修订版本的补丁,用于实现 PostgreSQL 的密钥管理。

Justin Pryzby 提交了另外两个修订版本的 pg_dump 补丁,该补丁使 pg_dump 输出单独的“对象”来表示 ALTER TABLE..ATTACH PARTITION。

Peter Eisentraut 提交了一个补丁,将 elog(LOG) 调用转换为 ereport()(如果适用)。

David Zhang 提交了另外两个修订版本的补丁,为 pgbench 添加了表访问方法作为选项。

Ajin Cherian 和 Peter Smith 交换了补丁,为逻辑解码添加了双阶段事务。

Amit Langote、Kyotaro HORIGUCHI 和 Keisuke Kuroda 交换了补丁,修复了一个导致分区表具有外键时出现巨大内存消耗的 bug。

Dean Rasheed 提交了另外两个修订版本的补丁,以使 OR 子句使用扩展统计信息。

Peter Eisentraut 提交了两个修订版本的补丁,移除了不必要的 SELECT INTO 用法,并在参考页面上澄清了 SELECT INTO 的状态。

Takayuki Tsunakawa 提交了两个修订版本的补丁,修复了一个导致 ALTER TABLE SET LOGGED/UNLOGGED 对分区表静默无效的 bug。

Takamichi Osumi 提交了另一个修订版本的补丁,添加了一个禁用 WAL 日志记录的选项以加快数据加载速度。

Julien Rouhaud 提交了一个补丁,为 REINDEX 添加了一个新的 COLLATION 选项,该选项可用于过滤要重建的索引列表。当系统排序规则更新时,这非常有用。

Daniel Gustafsson 提交了另一个修订版本的补丁,支持在运行的集群中启用/禁用页面校验和。

Peter Eisentraut 提交了一个补丁,移除了不必要的语法符号。

Thomas Munro 提交了一个 WIP 补丁,用于使用 Github Actions 进行 CI。

Bharath Rupireddy 提交了三个修订版本的补丁,添加了两个新函数:pg_terminate_backend(pid, wait, timeout),用于终止并等待或超时给定后端;以及 pg_wait_backend(pid, timeout),用于检查具有给定 PID 的后端是否存在,并等待或超时直到其消失。

Pavel Borisov 提交了另外两个修订版本的补丁,用于实现覆盖 SPGiST 索引。

Jeff Davis 提交了一个补丁,以确保在 walsender 中将格式与类型一起发送。

Craig Ringer 提交了另一个修订版本的补丁,用一个新的 GUC `debug_clobber_cache_depth` 替换了 CLOBBER_CACHE_ALWAYS。

Amit Kapila 和 Peter Smith 交换了补丁,以提高逻辑复制的 tablesync 的吞吐量。

Kirk Jamison 提交了两个修订版本的补丁,用于在恢复期间防止在 smgrextend() 中使块失效,在 smgrnblocks() 中添加一个布尔参数用于缓存块以确保从 smgrnblocks 返回可靠值,使 DropRelFileNodeBuffers() 在恢复期间效率更高,通过避免在关系足够小或要失效的总块数低于完全扫描阈值时扫描整个缓冲区池,并使 DropRelFileNodesAllBuffers() 在恢复期间效率更高,通过在关系足够小或要失效的总块数低于完全扫描阈值时跳过耗时的扫描整个缓冲区池。

Tomáš Vondra 提交了另外两个修订版本的补丁,使表达式上可以使用扩展统计信息。

Nathan Bossart 和 Michaël Paquier 交换了补丁,将 checkpoint/restartpoint 状态添加到 ps 显示中。

Laurenz Albe 发送了对补丁的两个修订,以将会话统计信息添加到 pg_stat_database。

Julien Rouhaud 提交了两个修订版本的补丁,向 pg_stat_statements 添加了一个 toplevel 布尔列。

Tom Lane 提交了一个补丁,移除了 operator_precedence_warning。

Antonin Houska 提交了另一个修订版本的补丁,使用撤销日志清理孤立文件。

Joel Jacobson 提交了三个修订版本的补丁,添加了对 bytea 的头部/尾部 trim() 的支持。

David Rowley 提交了另外两个修订版本的补丁,允许 estimate_num_groups() 返回有关估算的更多详细信息,允许 simplehash.h 的用户执行直接删除,添加了一个 Result Cache 执行器节点,移除了 nodeResultCache.c 中的一些代码重复,并使用 Result Cache 节点来缓存子计划的结果。

Greg Nancarrow 提交了另外两个修订版本的补丁,添加了新的配置参数 "disable_event_triggers",并添加了一个新的“client_connection”事件,支持“logon trigger”。

Bharath Rupireddy 提交了另一个修订版本的补丁,添加了一个 postgres_fdw 函数来丢弃缓存的连接,添加了一个 keep_connections GUC 到 postgres_fdw 以避免缓存连接,并添加了一个 postgres_fdw 服务器级选项 keep_connection 以不缓存连接。

Peter Eisentraut 提交了一个补丁,将位图标志的定义更改为位移样式。

Nathan Bossart 提交了三个修订版本的补丁,为 checkpoint 添加了一个 SPREAD 选项。

Justin Pryzby 提交了一个补丁,对 pg_upgrade/test.sh 进行了必要的更改,以允许测试从 v11 升级,并添加了一个 pg_upgrade 测试来执行二进制兼容性检查。

Amit Langote 提交了另一个修订版本的补丁,将 ForeignScanState.resultRelInfo 设为惰性加载,将 ResultRelInfo.ri_PartitionRoot 设置为所有结果关系(不仅仅是元组路由的目标),并惰性初始化结果关系信息。

Vigneshwaran C 提交了一个补丁,将一些与 copy 相关的结构添加到 typedefs.list 中,这些结构是在将 copy 分拆成更小的文件时添加的。

Peter Eisentraut 提交了另一个修订版本的补丁,将主键和唯一约束添加到系统目录。

Vigneshwaran C 提交了另一个修订版本的补丁,使 COPY FROM 可以使用多个工作进程运行。

Andrey Borodin 提交了另外两个修订版本的补丁,为 'pageinspect' 添加了检查 GiST 索引的函数。

Bharath Rupireddy 提交了另外三个修订版本的补丁,使 CTAS 中的并行插入成为可能,并为此类情况进行了一些元组成本调整。

Stephen Frost 提交了两个修订版本的补丁,将默认 checkpoint_completion_target 改为 0.9。

Greg Nancarrow 提交了另外两个修订版本的补丁,使 INSERT ... SELECT 的部分可以并行化。

Rémi Lapeyre 提交了另一个修订版本的补丁,为“COPY”文本格式添加了头部支持。

Alexander Korotkov 提交了另一个修订版本的补丁,支持多范围。

Takamichi Osumi 提交了另一个修订版本的补丁,实现了一个更强大的归档恢复保护机制,以确保不会丢失数据。

Vigneshwaran C 提交了另一个修订版本的补丁,打印当前实例的 postgres 进程的堆栈跟踪。

Gilles Darold 提交了一个补丁,在 XactCommand 级别添加了三个钩子:start_xact_command_hook,在 start_xact_command() 结束时调用;finish_xact_command,在 finish_xact_command() 中 CommitTransactionCommand() 之前调用;以及 abort_current_transaction_hook,在 AbortCurrentTransaction() 结束时遇到错误后调用。

Masahiro Ikeda 提交了两个修订版本的补丁,为 pg_stat_wal 视图添加了 WAL 写入/fsync 统计信息。

Denis Smirnov 提交了一个 PoC 补丁,重构了 AM analyse API。

Bharath Rupireddy 提交了一个补丁,为 Multi 和 Single 插入添加了表访问方法。

Andrey Borodin 和 Gilles Darold 交换了补丁,使用共享锁而非排他锁来获取 MultiXactId 成员(用于偏移量和成员),使 MultiXact 本地缓存大小可配置,添加了一个条件变量以在特定情况下等待下一个 MultXact 偏移量,并添加了 GUCs 来调整 MultiXact SLRUs。

Hou Zhijie 提交了一个补丁,修复了与 generate_gather_paths 相关的拼写错误。

Shinya Kato 提交了一个补丁,改进了 psql 对 CLOSE、FETCH 和 MOVE 的制表符补全。

Michaël Paquier 提交了一个补丁,旨在修复一个在 check-world -jnn 中偶尔导致 tablespace.sql 失败的 bug,方法是安排 pg_regress 清理测试表空间目录,或在所有平台上创建它(如果它不存在)。

Kyotaro HORIGUCHI 提交了一个补丁,添加了一个新测试来检测复制 bug,并确保 WalSndSegmentOpen 在发送历史时间线的物理复制时跟踪时间线切换。

Andrey Borodin 提交了另一个修订版本的补丁,使取消同步提交成为可能。

Zeng Wenjing 发送了另一个版本的补丁,用于实现全局临时表。

Dilip Kumar 提交了另一个修订版本的补丁,实现了表的自定义压缩方法,包括动态更改它们的方法。

Fujii Masao 提交了另一个修订版本的补丁,为 pg_stat_statements 添加了 stats_reset 时间。

Justin Pryzby 提交了另一个修订版本的补丁,使 `make pg_ls_*()` 可以显示目录和共享文件集。

Justin Pryzby 提交了一个补丁,为 CREATE TABLE LIKE 添加了 INCLUDING ACCESS METHOD 选项。

Chen Hujaun 提交了另一个修订版本的补丁,使 OLTP 页面压缩成为可能。

Andrey Borodin 提交了另一个修订版本的补丁,通过将一些宏函数转换为常规函数并使用更紧凑的哈希表,以及其他一些优化,来加速 pglz 压缩代码。

Atsushi Torikoshi 提交了另一个修订版本的补丁,实现了 pg_get_target_backend_memory_contexts(),该函数能够收集任意后端进程的内存上下文。

Peter Geoghegan 提交了另一个修订版本的补丁,传递了一个“逻辑上未更改的索引”提示,并使用该提示添加了自底向上的索引删除。

Dilip Kumar 提交了另一个修订版本的补丁,以确保 pg_is_wal_replay_paused 等待恢复暂停。

Daniel Gustafsson 提交了一个补丁,将信息回调提前到 TLS 协商中,以捕获连接。用于在连接设置期间检索状态更改信息的​​回调仅在连接大部分设置完成后安装,因此提供的信息不多。这还扩展了回调,以打印有关状态更改的详细信息。

Peter Eisentraut 提交了一个补丁,允许在标准 GRANT 和 REVOKE 语句中使用 GRANTED BY 子句,符合 SQL 标准。

Stephen Frost 提交了一个补丁,旨在修复一个导致 autovacuum 工作进程在 postmaster 死亡后不会立即退出的 bug,方法是用 WaitLatch 替换一些系统调用。

Bharath Rupireddy 提交了一个补丁,在 CTAS/CMV 中如果关系已存在则快速失败。

Lukas Meisegeier 提交了一个补丁,为基于 SNI 的负载均衡添加了 ssltermination 参数。

Amit Kapila 提交了一个补丁,通过对每个块使用 popcount64,并避免对 pg_popcount32/64() 的调用进行函数指针解引用,来加速 tsvector 的两个 gist 索引签名的异或操作。

Kyotaro HORIGUCHI 提交了另一个修订版本的补丁,重新设计了 stats collector,使其使用共享内存而不是文件进行临时存储。

Kyotaro HORIGUCHI 提交了一个补丁,修复了 pg_shmem_allocations 的文档,提及它对于匿名分配是 NULL。

Peter Eisentraut 提交了一个补丁,清理了一个古老的测试样式。测试的编写方式类似于 `SELECT '' AS two, i.* FROM INT2_TBL`,其中第一列指示预期的结果行数。为了清理这一点,移除了所有那些额外的列。

Tom Lane 提交了两个修订版本的补丁,重构了 PL/pgSQL 的赋值实现,使其使用更多核心功能。

Peter Eisentraut 和 Justin Pryzby 交换了补丁,允许 CLUSTER、VACUUM FULL 和 REINDEX 动态更改表空间。