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 新闻

PostgreSQL 星球:http://planet.postgresql.org/

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

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

应用的补丁

Michaël Paquier 推送了

  • 修复 pg_verifybackup 中的 fd 泄漏。由 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 值,就地更新将失败。此更改不使用 catcache 中的副本,而是更改逻辑,直接扫描 pg_database 以获取元组的副本。由于在此问题上没有投诉,因此不进行回溯。请注意,在 96cdeae 之前,尝试将此类元组插入 pg_database 会导致“行太大”错误,因此无法到达 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,而不是 Postgres 多年来一直使用的回退实现。借助最近对 cryptohash 函数的重构工作,此更改非常简单。如果不使用 OpenSSL 构建,则使用 src/common/ 内部的回退实现。其次,这将树中存在的 MD5 实现数量从两个减少到一个,方法是将 KAME 实现从 pgcrypto 移动到 src/common/,并删除 src/common/ 中存在的实现。KAME 已经由 pgcrypto 结构化为一组 init/update/final 例程(请参阅原始 pgcrypto/md5.h),以与 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 删除。此代码可以直接使用新的 cryptohash 例程进行 MD5 的直接替换,而不是使用 pgcrypto 中的代码,因此我们只需进行此切换即可。这也简化了 uuid-ossp 的编译。这需要重新生成 --with-uuid,我使用 e2fs 作为一种重现故障的方法,然后测试此提交。根据构建农场成员 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

  • 添加几个与数组下标相关的回归测试用例。在现有的回归测试中,练习了一些从未到达的错误情况。部分原因是出于代码覆盖率的考虑,部分原因是为即将进行的通用下标更改预先记录当前行为。此外,我注意到,当我们为所有系统目录行类型添加数组 (f7f70d5e2),以及当我们添加域类型上的数组 (c12d570fa) 时,type_sanity 验证所有标准类型是否都有数组类型的检查从未扩展。所以这样做。此外,由于查询的预期输出不是空的,因此添加 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 与 UNIQUE 进行了说明,而不是 UNIQUE 与 UNIQUE。在此期间,我忍不住对关于 INCLUDE 选项的相邻文本进行了一些复制编辑和标记修复。根据 Matthias vd Meent 的错误 #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 之前的分支都已不再支持,并且 9.5 也将在 v14 发布之前不再支持,那么删除它似乎可以了。这样做可以删除 parse_expr.c 中数百行测试不佳的代码,这些代码在人们使用它时一直是错误的来源。讨论:https://postgr.es/m/2234320.1607117945@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/a676386b58bf7cd2df81baa43eb1713d3a2ec055

  • 告知 contain_leaked_vars,赋值 SubscriptingRefs 是泄漏的。array_get_element 和 array_get_slice 符合防泄漏条件,因为它们会静默地为伪造的下标返回 NULL。但是,array_set_element 和 array_set_slice 会为此类情况抛出错误,这使得它们显然不防泄漏。contain_leaked_vars 显然是在考虑前一种情况的情况下编写的,因为它为赋值 SubscriptingRefs(又名 ArrayRefs)给出了错误的答案。这会是一个实际的安全漏洞,但实际上赋值 SubscriptingRefs 只能出现在 INSERT 和 UPDATE 目标列表中,而我们只关心限定表达式的防泄漏性;因此实际上不会出现错误的答案。尽管如此,对于安全相关的问题来说,这是一个相当不稳定的答案;并且将来可能有人会想询问 tlist 的防泄漏性。因此,修复甚至是回溯此更正似乎是明智的。(我们无论如何都需要对此处进行一些更改以适应即将到来的通用下标补丁,因为扩展可能会在是否抛出错误方面做出不同的权衡。提交 558d77f20 试图为此奠定基础,通过询问 check_functions_in_node SubscriptingRef 是否包含泄漏函数;但是,由于 SubscriptingRef 的实现方法不是 SQL 可见的函数,无法标记为防泄漏或不防泄漏,因此该想法现在失败了。)回溯到 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 表达式节点的 结果类型、排序规则等的硬编码假设;并消除关于下标值必须为整数的假设。这样做的一个有用的副作用是,我们现在有了一个不那么模糊的机制来识别数据类型是否为“真正”的数组:我们可以查看 pg_type.typsubscript == F_ARRAY_SUBSCRIPT_HANDLER,而不是硬编码关于 typlen 的奇怪规则。为了使其万无一失,我们必须禁止用户定义的类型直接使用该处理函数;但似乎没有充分的理由让他们这样做。此补丁还消除了对下标数量限制为 MAXDIM (6),或者实际上有任何硬编码限制的假设。该限制仍然适用于由 array_subscript_handlerraw_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

  • 为“无法使用下标”错误消息提供错误光标。提交 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

  • 加速自动清理中重新检查关系是否需要清理或分析。自动清理收集要清理或分析的关系后,它会重新检查每个关系是否仍然需要清理或分析,然后再实际执行此操作。以前,这种重新检查可能会产生很大的开销,尤其是在存在大量关系时。这是因为每次重新检查都强制刷新统计信息,而刷新大量关系的统计信息可能会导致巨大的开销。有报告称,此问题导致自动清理工作进程“卡住”在 table_recheck_autovac() 的紧密循环中,该循环重新检查关系是否需要清理或分析。此提交通过使自动清理工作进程在可能的情况下重用先前读取的统计信息进行重新检查来加速重新检查。然后,如果该“过时”的统计信息表明关系仍然需要清理或分析,则自动清理会刷新统计信息并再次进行重新检查。基准测试表明,存在的关系越多且自动清理工作进程同时运行的越多,此更改减少自动清理执行时间的效果就越明显。例如,当有 20,000 个表并且运行 10 个自动清理工作进程时,基准测试表明,此更改将自动清理的性能提高了三倍以上。另一方面,即使只有 1000 个表并且只有一个自动清理工作进程在运行,基准测试也没有显示此更改导致任何大的性能下降。首先,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 发送了一个补丁,允许使用 LIMIT/OFFSET 的并行 LATERAL 子查询。

Peter Eisentraut 发送了一个 WIP 补丁,以修复 temp-install 测试以使其与 macOS SIP 一起工作。

Pavel Stěhule 发送了另一个补丁修订版,以添加一个 unistr 函数,该函数评估各种形式的 unicode 转义字符。

Bruce Momjian 发送了另外两个补丁修订版,以实现 PostgreSQL 的密钥管理。

Justin Pryzby 发送了另外两个补丁修订版到 pg_dump,使其为 ALTER TABLE..ATTACH PARTITION 输出单独的“对象”。

Peter Eisentraut 发送了一个补丁,将 elog(LOG) 调用转换为适当的 ereport()。

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

Ajin Cherian 和 Peter Smith 交换了补丁,以将两阶段事务添加到逻辑解码。

Amit Langote、Kyotaro HORIGUCHI 和 Keisuke Kuroda 交换了补丁,以修复在具有外键的分区表上表现为巨大内存消耗的错误。

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

Peter Eisentraut 发送了两个补丁修订版,以删除不必要的已弃用的 SELECT INTO 用法,并阐明参考页面上 SELECT INTO 的状态。

Takayuki Tsunakawa 发送了两个补丁修订版,以修复在分区表上将 ALTER TABLE SET LOGGED/UNLOGGED 静默地执行但无效的错误。

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 交换了补丁,以加快逻辑复制的表同步中的吞吐量。

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

Tomáš Vondra 发送了另外两个补丁修订版,以使在表达式上使用扩展统计信息成为可能。

Nathan Bossart 和 Michaël Paquier 交换了补丁,以将检查点/重启点状态添加到 ps 显示中。

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

Julien Rouhaud 发送了两个补丁修订版,以将一个布尔 toplevel 列添加到 pg_stat_statements。

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 函数来丢弃缓存的连接,向 postgres_fdw 添加 add keep_connections GUC 以避免缓存连接,并向 postgres_fdw 添加一个服务器级选项 keep_connection 以不缓存连接。

Peter Eisentraut 发送了一个补丁,以将位图标志的定义更改为位移式。

Nathan Bossart 发送了另外三个补丁修订版,以向检查点添加 SPREAD 选项。

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

Amit Langote 发送了另一个补丁修订版,以延迟设置 ForeignScanState.resultRelInfo,在所有结果关系(而不仅仅是作为元组路由目标的那些关系)中设置 ResultRelInfo.ri_PartitionRoot,并延迟初始化结果关系信息。

Vigneshwaran C 发送了一个补丁,将一些与复制相关的数据结构添加到 typedefs.list,这些数据结构是在将复制拆分为较小的文件时添加的。

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,在 CommitTransactionCommand() 之前在 finish_xact_command() 中调用,以及 abort_current_transaction_hook,在 AbortCurrentTransaction() 末尾遇到错误后调用。

Masahiro Ikeda 发送了两个补丁修订版,以将 WAL 写入/fsync 统计信息添加到 pg_stat_wal 视图。

Denis Smirnov 发送了一个 PoC 补丁,以重构 AM 分析 API。

Bharath Rupireddy 发送了一个补丁,以添加用于多插入和单插入的表访问方法。

Andrey Borodin 和 Gilles Darold 交换了补丁,以在 GetMultiXactIdMembers 中使用共享锁而不是独占锁,以获得偏移量和成员,使 MultiXact 本地缓存大小可配置,添加一个条件变量以在特殊情况下等待下一个 MultXact 偏移量,并添加 GUC 以调整 MultiXact SLRUs。

Hou Zhijie 发送了一个补丁,以修复有关 generate_gather_paths 的拼写错误。

Shinya Kato 发送了一个补丁,以改进 psql 对 CLOSE、FETCH 和 MOVE 的制表符补全功能。

Michaël Paquier 发送了一个补丁,旨在修复 check-world -jnn 中偶尔出现的 tablespace.sql 故障,方法是安排 pg_regress 清除测试表空间目录,或者在所有平台上都不存在时创建它。

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

Andrey Borodin 发送了另一个补丁修订版,以使禁止取消同步提交成为可能。

Zeng Wenjing 发送了另一个补丁修订版,以实现全局临时表。

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

Fujii Masao 发送了另一个补丁修订版,以将 stats_reset 时间添加到 pg_stat_statements。

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

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

陈虎军提交了补丁的又一个修订版本,以使 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 语句中使用 SQL 标准规定的 GRANTED BY 子句。

Stephen Frost 提交了一个补丁,旨在修复一个由 autovacuum 工作进程在 postmaster 死亡时没有立即退出的错误,方法是将一些系统调用替换为 WaitLatch。

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

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

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

Kyotaro HORIGUCHI 提交了补丁的又一个修订版本,以重构统计信息收集器,使其使用共享内存而不是文件进行临时存储。

Kyotaro HORIGUCHI 提交了一个补丁,通过提到匿名分配为 NULL 来修复 pg_shmem_allocations 的文档。

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

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

Peter Eisentraut 和 Justin Pryzby 交换了补丁,以允许 CLUSTER、VACUUM FULL 和 REINDEX 在运行时更改表空间。