PostgreSQL 每周新闻 - 2021 年 1 月 17 日

由 PWN 发布于 2021-01-18
PWN

PostgreSQL 每周新闻 - 2021 年 1 月 17 日

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

PostgreSQL 产品新闻

pspg 4.0.0 发布,一个专为 PostgreSQL 设计的分页器。https://github.com/okbob/pspg/releases/tag/4.0.0

DBConvert Studio 2.0 发布,一个支持 PostgreSQL 的数据库迁移和同步套件。https://dbconvert.com/dbconvert-studio

1 月份的 PostgreSQL 工作

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

PostgreSQL 新闻

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

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

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

已应用的补丁

Thomas Munro 推送了

Tom Lane 推送了

  • 在 libpq 中,始终将新的错误消息附加到 conn->errorMessage。以前,我们在 libpq 中使用 printfPQExpBuffer 和 appendPQExpBuffer 调用的不规则混合来报告错误。此提交建立了一个统一规则,即应使用 appendPQExpBuffer[Str]。conn->errorMessage 仅在应用程序请求开始时重置,然后累积消息直到完成。我们可以删除不少于三种不同的临时机制,这些机制用于在操作序列中获得错误消息的连接效果。虽然这使得概念上更清晰一些,但这样做主要的原因是为了使添加后的一段时间的多个目标主机功能更加安全。以前,在单个主机连接尝试期间发生的错误会清除先前尝试期间发生的事情的记录。 (报告仍然不足,因为它很难分辨哪个主机发生了故障,但这似乎是单独提交的问题。)目前,lo_import 和 lo_export 包含“永远不要使用 printfPQExpBuffer”规则的例外。如果我们更改它们,我们可能会在实际的读取或写入失败之前报告偶然的 lo_close 失败,这将令人困惑,尤其是在主失败之后发生了 lo_close。我们可以通过发明一个不重置 errorMessage 的 lo_close 内部版本来改进这一点;但是我们还需要一个执行此操作的 PQfn() 版本,而且现在看起来不太值得麻烦。讨论:https://postgr.es/m/BN6PR05MB3492948E4FD76C156E747E8BC9160@BN6PR05MB3492.namprd05.prod.outlook.com https://git.postgresql.org/pg/commitdiff/ffa2e4670123124b92f037d335a1e844c3782d3f

  • 允许 pg_regress.c 包装器后处理测试结果文件。向 regression_main() 添加一个可选的回调,如果提供,则在我们将每个测试输出文件与其预期结果文件进行比较之前,将调用该回调。主程序和隔离测试程序(目前)不需要此功能。在 pg_regress_ecpg 中,添加一个过滤器,该过滤器从“无法连接”的错误报告中消除目标主机详细信息。此过滤器在此提交时尚未执行任何操作,但下一个提交需要它。从长远来看,我们可能希望为测试输出提供一些更通用的、可能基于模式的过滤机制。目前,这将解决当前的问题。讨论:https://postgr.es/m/BN6PR05MB3492948E4FD76C156E747E8BC9160@BN6PR05MB3492.namprd05.prod.outlook.com https://git.postgresql.org/pg/commitdiff/800d93f314b0f7c10193e48b259f87800cb85d84

  • 在 libpq 连接失败报告中统一标识目标主机。将“无法连接到主机或套接字路径:”前缀添加到 socket() 调用后发生的所有连接失败情况,并删除附加到其中一些消息的临时服务器标识数据。这应该在多目标主机情况下产生更易于理解的错误报告,尤其是在任何程度的偏离常规的错误情况下(因为这些都没有提供任何服务器标识信息)。作为更改的一个示例,以前,使用错误的端口号(例如“psql -p 12345 -h localhost,/tmp”)的连接尝试可能会产生 psql:错误:无法连接到服务器:连接被拒绝 服务器是否在主机“localhost”(::1)上运行并接受端口 12345 上的 TCP/IP 连接?无法连接到服务器:连接被拒绝 服务器是否在主机“localhost”(127.0.0.1)上运行并接受端口 12345 上的 TCP/IP 连接?无法连接到服务器:没有这样的文件或目录 服务器是否在本地运行并接受 Unix 域套接字“/tmp/.s.PGSQL.12345”上的连接?现在看起来像 psql:错误:无法连接到主机“localhost”(::1),端口 12345:连接被拒绝 服务器是否在该主机上运行并接受 TCP/IP 连接?无法连接到主机“localhost”(127.0.0.1),端口 12345:连接被拒绝 服务器是否在该主机上运行并接受 TCP/IP 连接?无法连接到套接字“/tmp/.s.PGSQL.12345”:没有这样的文件或目录 服务器是否在本地运行并接受该套接字上的连接?这需要调整几个回归测试,以允许连接失败消息的内容发生变化。讨论:https://postgr.es/m/BN6PR05MB3492948E4FD76C156E747E8BC9160@BN6PR05MB3492.namprd05.prod.outlook.com https://git.postgresql.org/pg/commitdiff/52a10224e3cc1d706ba9800695f97cb163b747d5

  • 在“现在无法连接”失败后尝试下一个主机。如果服务器返回 ERRCODE_CANNOT_CONNECT_NOW,则尝试下一个主机(如果已提供多个主机名)。这允许优雅地处理可能尚未处于热备模式的备用服务器。在前面提交之后,重试我们现在执行的许多错误情况可能是合理的,但我(tgl)不愿对此过于激进——例如,对于密码错误的情况,不清楚它是否可取。但是这种情况看起来足够安全。Hubert Zhang,由 Takayuki Tsunakawa 审核 讨论:https://postgr.es/m/BN6PR05MB3492948E4FD76C156E747E8BC9160@BN6PR05MB3492.namprd05.prod.outlook.com https://git.postgresql.org/pg/commitdiff/c1d589571c497a952d7fbe40d9828655859d746f

  • 重新考虑 ERRCODE_IDLE_SESSION_TIMEOUT 的 SQLSTATE 代码。将其移动到 57 类(操作员干预),鉴于从客户端的角度来看,它的行为很像 ERRCODE_ADMIN_SHUTDOWN,因此这似乎是更好的选择。在全新的领域中,我也会将 ERRCODE_IDLE_IN_TRANSACTION_SESSION_TIMEOUT 放在这里。但是这种情况已经存在了好几年,所以现在可能为时已晚,无法更改其 SQLSTATE 代码。讨论:https://postgr.es/m/763A0689-F189-459E-946F-F0EC4458980B@hotmail.com https://git.postgresql.org/pg/commitdiff/4edf96846a02693e4416478b3302e5133d2e8e01

  • 使 pg_dump 的对象类型优先级表更易于维护。历史上,向此表中楔入新的对象类型需要手动重新编号许多现有条目。(尽管看起来有些人偷懒,重复使用了现有对象类型的优先级级别,即使它们之间没有特别的关联。)我们可以让编译器通过创建一个枚举类型来完成计数,该枚举类型按顺序列出所需的优先级级别。现在,如果您想添加或删除优先级级别,只需要一行代码即可。此补丁并非纯粹是表面上的修改,因为我拆分了 DO_COLLATION 和 DO_TRANSFORM 的优先级,以及 DO_ACCESS_METHOD 和 DO_OPERATOR 的优先级,在我看来,它们是为了方便而合并在一起的,而不是因为这是一个好主意。Shell 类型继续与完整类型交替排序,操作符类与操作符族交替排序。https://git.postgresql.org/pg/commitdiff/d5ab79d815783fe60062cefc423b54e82fbb92ff

  • 将 ALTER TABLE ... ATTACH PARTITION 作为单独的 ArchiveEntry 转储。之前,我们将 ATTACH PARTITION 命令作为子表的 ArchiveEntry 的一部分发出。这是一个糟糕的选择,因为它使得将分区还原为独立表变得复杂;您必须忽略来自 ATTACH 的错误,当使用 pg_restore 直接还原到数据库时,这甚至不是一个选项。(pg_restore 将整个 ArchiveEntry 作为一次 PQexec 发出,因此任何错误都会回滚表的创建。)因此,将其作为自己的 ArchiveEntry 分开,就像我们对索引 ATTACH PARTITION 命令所做的那样。Justin Pryzby 讨论:https://postgr.es/m/20201023052940.GE9241@telsasoft.com https://git.postgresql.org/pg/commitdiff/9a4c0e36fbd671b5e7426a5a0670bdd7ba2714a0

  • 文档:修复 ALTER PUBLICATION 所需权限的描述。向发布中添加表需要拥有该表的所有权(除了拥有该发布的所有权之外)。这一点在任何地方都没有提及。https://git.postgresql.org/pg/commitdiff/cc865c0f319fde22540625e02863f42e9853b3e4

  • pg_dump:使用所有者标记 INDEX ATTACH ArchiveEntries。尽管分区索引与其父级的连接没有单独的所有权,但其 ArchiveEntry 仍然需要标记所有者,以确保在使用 --use-set-session-authorization 还原时,ALTER 命令由适当的角色运行。如果没有这个,ALTER 将由启动还原会话的角色运行,这通常可以工作,但形式上是不正确的。回溯到添加此类型 ArchiveEntry 的 v11。在 HEAD 中,为刚刚添加的 TABLE ATTACH 情况添加等效的注释,我已经使其执行了正确的操作。讨论:https://postgr.es/m/1094034.1610418498@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/9eabfe300a22ad3d776dc293265e15379790bd9a

  • 文档:阐明 pg_dump 中后半部分选项的行为。当转储为归档格式时,更改如何将归档数据转换为 SQL 文本的选项将被忽略。文档之前说“没有意义”,这没有帮助。讨论:https://postgr.es/m/161052021249.12228.9598689907884726185@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/06ed235adeb621a73cafd6ab35fa2405b3177329

  • 禁止在 pgbench 中使用数字作为变量名的第一个字符。此限制的目的是避免尝试将变量替换为时间戳文字值,时间戳文字值可能包含诸如“12:34”之类的字符串。为了减少 pgbench 在不应该替换的地方进行替换的倾向,还需要做更多的工作。但这足以解决 Jaime Soler 抱怨的情况,而且足够简单可以回溯。回溯到 v11;在提交 9d36a3866 之前,pgbench 对变量名的定义略有不同,无论如何,为此更改长期稳定的分支似乎是不明智的。Fabien Coelho 讨论:https://postgr.es/m/alpine.DEB.2.22.394.2006291740420.805678@pseudo https://git.postgresql.org/pg/commitdiff/c21ea4d53e9404279273da800daa49b7b9a5e81e

  • 文档,或多或少:取消注释很久以前修复的教程示例。恢复提交 344190b7e 的一部分。显然,在 20 世纪,我们有一些关于多语句 SQL 函数的问题,但它们已经正常工作了很长时间。Daniel Westermann 讨论:https://postgr.es/m/GVAP278MB04242DCBF5E31F528D53FA18D2A90@GVAP278MB0424.CHEP278.PROD.OUTLOOK.COM https://git.postgresql.org/pg/commitdiff/dce62490818170b6479dfe08a28aae4bcdf7cc2d

  • 运行 reformat-dat-files 来整理目录数据文件。这里的事情变得非常混乱,显然主要是但不完全是 multirange 补丁的错。没有功能更改。https://git.postgresql.org/pg/commitdiff/8b411b8ff41566a1aa601d1f05aeebbebbdb4a54

  • 将 inet_server_addr() 和 inet_server_port() 标记为并行限制的。这些需要是 PR,因为它们访问 MyProcPort 数据结构,该数据结构不会复制到并行工作进程。非常相似的函数 inet_client_addr() 和 inet_client_port() 已经标记为 PR,但有人错过了这些函数。尽管这是一个预先存在的错误,但我们无法在回溯分支中轻松修复它,因为我们无法强制 initdb。考虑到这两个函数的少量使用,以及它们无论如何都更不可能被推送到并行工作进程的情况,建议 DBA 手动修复似乎不值得麻烦。Masahiko Sawada 讨论:https://postgr.es/m/CAD21AoAT4aHP0Uxq91qpD7NL009tnUYQe-b14R3MnSVOjtE71g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/5a6f9bce8dabd371bdb4e3db5dda436f7f0a680f

  • pg_dump:使用所有者标记 PUBLICATION TABLE ArchiveEntries。这与应用于 INDEX ATTACH 条目的提交 9eabfe300 的修复相同,但适用于表到发布的连接。与该情况一样,即使后端不记录连接的“所有权”,我们仍然应该在转储归档文件中使用应该运行 ALTER PUBLICATION 命令的角色名称来标记它。现有行为导致 ALTER 由启动还原的原始角色完成;这通常可以正常工作,但可能存在失败的极端情况。此补丁的大部分内容涉及更改 struct PublicationRelInfo 以包含指向关联的 PublicationInfo 对象的指针,以便我们可以在时机成熟时从中获取所有者的名称。同时,我重写了 getPublicationTables(),使其只查询一次 pg_publication_rel,而不是每个表查询一次。回溯到引入此代码的 v10。讨论:https://postgr.es/m/1165710.1610473242@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/8e396a773b80c72e5d5a0ca9755dffe043c97a05

  • 改进我们在 macOS 上选择 PG_SYSROOT 的启发式方法。在 Xcode 比底层 macOS 版本更新的情况下,向 xcodebuild 询问 SDK 路径会生成指向 Xcode 随附的 SDK 的指针,这最终可能会构建在底层 macOS 版本上不起作用的代码。似乎在这种情况下,xcodebuild 的答案也与 Apple 编译器的默认行为不匹配:假设已经安装了 Xcode 的“命令行工具”,则在 /Library/Developer/CommandLineTools 中将有一个用于操作系统自身版本的 SDK,并且编译器将默认使用该 SDK。所有这些都没有很好的文档记录,但实验表明,“xcrun --show-sdk-path”给出了编译器实际使用的 sysroot 路径,至少在某些情况下是这样。因此,首先尝试使用该命令,如果 xcrun 失败(在非常旧的 Xcode 中,它缺少或缺少 --show-sdk-path 开关),则恢复为 xcodebuild。此外,“xcrun --show-sdk-path”可能会给出有效的路径,但缺少任何操作系统版本标识符。我们并不真正想要那样,因为将 -isysroot 连接到构建标志的主要动机是确保 PG 安装的所有部分都针对同一个 SDK 构建,即使考虑到以后构建的和/或在不同计算机上构建的扩展也是如此。在接受结果之前,坚持在目录名称中找到“N.N”。(将“--sdk macosx”添加到 xcrun 调用似乎会产生与 xcodebuild 相同的答案,但通常更快,因为它已被缓存,因此我们也尝试将其作为回退。)在这种情况下,我们不想使用 Xcode 的默认 SDK 的核心原因是 Apple 用于引入新系统调用的技术与 Autoconf 不兼容:例如,当使用 Big Sur SDK 时,configure 会认为 preadv/pwritev 存在,即使在构建它们的较旧的 macOS 版本中不存在也是如此。最好有一个更好的解决方案来解决这个问题,但此补丁没有尝试修复它。根据 Sergey Shinderuk 的报告。回溯到所有受支持的版本。讨论:https://postgr.es/m/ed3b8e5d-0da8-6ebd-fd1c-e0ac80a4b204@postgrespro.ru https://git.postgresql.org/pg/commitdiff/4823621db312a0597c40686c4c94d47428889fef

  • 将缺失的数组扩容逻辑添加到 test_regex.c。报告“部分”匹配的节可能会超出最初分配的输出数组,因此它需要自己复制主循环中的数组调整大小逻辑。我在 ca8217c10 中忽略了这一需求。根据 Alexander Lakhin 的报告。讨论:https://postgr.es/m/3206aace-50db-e02a-bbea-76d5cdaa2cb6@gmail.com https://git.postgresql.org/pg/commitdiff/0c7d3bb99f72d66ec6ac63aee4c5fe6d683eee86

Amit Kapila 推送

Álvaro Herrera 推送了

Michaël Paquier 推送了

Heikki Linnakangas 推送了

Magnus Hagander 推送了此提交

Fujii Masao 推送了此提交

Peter Geoghegan 推送了此提交

  • 传递“逻辑上未更改的索引”提示。添加一个执行器 aminsert() 提示机制,通知索引 AMs,传入的索引元组(伴随提示的元组)不是通过执行逻辑上修改索引任何键列的 SQL 语句插入的。当发生 UPDATE 且未应用堆 AM 的 HOT 之类的优化时(尽管仅适用于所有键列在逻辑上都未更改的索引),索引会收到提示。任何在插入时收到提示的索引元组都应至少是同一逻辑行所需的至少一个现有旧版本的重复项。相关的版本通常会存储在同一个索引页上,至少在应用提示的索引 AM 中是这样。在索引 AM 级别识别 MVCC 版本搅动重复项和真实的逻辑行重复项之间的差异,可以帮助清理垃圾索引元组。清理可以智能地定位可能是垃圾的元组,而不会在不太有希望的元组/页面上浪费太多周期(很少或没有版本搅动的索引页)。这是即将推出的提交的基础设施,该提交将教会 nbtree 执行自底向上的索引删除。目前,没有任何索引 AM 实际应用提示。作者:Peter Geoghegan pg@bowt.ie。审阅者:Victor Yegorov vyegorov@gmail.com。讨论:https://postgr.es/m/CAH2-Wz=CEKFa74EScx_hFVshCOn6AA5T-ajFASTdzipdkLTNQQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/9dc718bdf2b1a574481a45624d42b674332e2903

  • 增强 nbtree 索引元组删除功能。使 nbtree 和堆访问方法(heapam)能够协同工作,以便主动删除代表已失效 MVCC 版本的重复元组。这被称为“自底向上删除”。每次自底向上删除操作都是在 nbtree 叶子页上出现大量版本时被懒加载触发的。这通常涉及到“逻辑上未更改的索引”提示(这些提示是由 commit 9dc718bd 添加的执行器机制生成的)。自底向上索引删除的直接目标是避免完全由版本重复引起的“不必要”的页面分割。不过,它自然而然地会产生更有用的效果:它可以防止任何给定的逻辑行累积过多索引元组版本。自底向上索引删除是对我们现在可能称之为“自顶向下索引删除”的补充:即由 VACUUM 执行的索引清理。自底向上索引删除响应查询的直接局部需求,同时将索引的非频繁全面清理交给自动清理进程(autovacuum)。总体效果是避免与 UPDATE 引起的“版本动荡”相关的某些病态性能问题。索引访问方法(AM)先前用于执行元组删除的 tableam 接口(table_compute_xid_horizon_for_tuples() 函数)已被支持某些新要求的新接口所取代。此提交添加到 nbtree 的许多(可能所有)功能也可以扩展到其他索引 AM。这留待以后的提交完成。通过添加逻辑来考虑在传递中删除额外的索引元组(这些元组未标记为 LP_DEAD),从而扩展 nbtree 中 LP_DEAD 标记索引元组的删除。这在许多情况下显着增加了删除的索引元组的数量。LP_DEAD 删除过程(现在称为“简单删除”,以将其与自底向上删除明确区分开来)通常不需要访问任何额外的表块来检查这些额外的元组。我们无论如何都必须访问相同的表块来生成 latestRemovedXid 值(至少在索引删除操作的 WAL 记录需要这样的值的常见情况下)。测试表明,“额外元组”简单删除增强功能几乎在任何在叶子页中设置了 LP_DEAD 位的负载下,都会增加删除的索引元组数量。也就是说,它几乎总是能成功删除至少一些额外的索引元组。在自然而然地存在大量删除安全元组的情况下,它最有帮助。与旧的简单方法相比,单个删除操作最终删除的索引元组数量通常会增加一个数量级(例如,该补丁的自定义工具显示,在运行回归测试时这种情况经常发生)。添加进一步的增强功能,在利用去重的索引中增强简单删除和自底向上删除:使 nbtree 的 bt_delitems_delete() 函数支持在发布列表元组中进行精细的 TID 删除。现在可以从发布列表元组中删除单独的 TID,前提是 TID 的表访问方法块编号属于作为删除过程一部分被访问的表块(访问表块可以直接或间接触发)。设置发布列表元组的 LP_DEAD 位仍然是一个全有或全无的操作,但现在删除只需要从关于哪些索引元组可删除的正确_一般_想法开始,这一点就没那么重要了。由于 xl_btree_delete 发生了变化,因此增加了 XLOG_PAGE_MAGIC。BTREE_VERSION 没有增加,因为 nbtree 索引的磁盘表示形式没有变化。在 pg_upgrade 之后,在 PostgreSQL 12 或 PostgreSQL 13 上构建的索引将自动受益于自底向上索引删除(即不需要重新索引)。无论用户从哪个 PostgreSQL 版本升级,在 pg_upgrade 之后,所有 B 树索引都可以使用简单删除的增强功能。作者:Peter Geoghegan pg@bowt.ie 审核人:Heikki Linnakangas hlinnaka@iki.fi 审核人:Victor Yegorov vyegorov@gmail.com 讨论:https://postgr.es/m/CAH2-Wzm+maE3apHB8NOtmM=p-DO65j2V5GzAWCOEEuy3JZgb2g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/d168b666823b6e0bcf60ed19ce24fb5fb91b8ccf

Tomáš Vondra 推送了

Noah Misch 推送了

  • 修复 pg_dump 中初始权限中的 GRANT OPTION 问题。此处的上下文是一个对象,该对象不再具有最初具有的某些 aclitem。(用户对该对象发出了 REVOKE 或 GRANT 语句。)pg_dump 正在形成 SQL 来重现该对象的 ACL。由于 initdb 不创建带有 GRANT OPTION 的 ACL,因此要触发此错误,需要扩展程序,其中创建脚本建立此类 ACL。没有 PGXN 扩展程序这样做。如果安装确实触发了此错误,则 pg_dump 会省略分号,导致 REVOKE 和下一个 SQL 语句失败。另外,由于受影响的代码旨在删除整个 aclitem,因此它需要普通的 REVOKE,而不是 REVOKE GRANT OPTION FOR。回溯到 9.6,commit 23f34fa4ba358671adab16773e79c17c92cbc870 首次出现的地方。讨论:https://postgr.es/m/20210109102423.GA160022@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/f713ff7c646e5912e08089de74dacdfaaac3d03b

  • 防止过多的 SimpleLruTruncate() 删除。每个核心 SLRU 都会回绕。除了 pg_notify 之外,回绕点可能落在页面的中间。在 PagePrecedes 回调规范中以及在 SimpleLruTruncate() 中使用该回调时考虑到这一点。更新每个回调实现以适应新规范。这会将 SerialPagePrecedesLogically() 从 asyncQueuePagePrecedes() 的样式更改为 CLOGPagePrecedes() 的样式。(虽然 pg_clog 和 pg_serial 共享一个键空间,但 pg_serial 与 pg_notify 完全不同。)此处修复的错误具有与 592a589a04bd456410b853d86bd05faa9432cbbb 相同的症状和用户后续步骤。回溯到 9.5(所有受支持的版本)。审核人:Andrey Borodin 和(在早期版本中)Tom Lane。讨论:https://postgr.es/m/20190202083822.GC32531@gust.leadboat.com https://git.postgresql.org/pg/commitdiff/6db992833c04c0322f7f34a486adece01651f929

Jeff Davis 推送了

待处理补丁

Andrey V. Lepikhov 发送了另一个补丁修订版,旨在删除一类可以安全删除的不必要的自连接。

Tom Lane 发送了一个补丁,旨在修复连接字符串中的多个主机在非热备模式下未能进行故障转移的错误,方法是修复连接的一些重试和错误逻辑。

David Fetter 发送了另一个补丁修订版,将 popcount 公开给 SQL。

Andrey V. Lepikhov 发送了另一个补丁修订版,以向 FDW API 添加批量插入接口,并在 PostgreSQL FDW 中使用相同的接口。这应该可以加快对具有外部分区的表的批量加载。

Masahiko Sawada 和 Bharath Rupireddy 交换了补丁,以避免在 conversion_error_callback 中访问目录。

Konstantin Knizhnik 和 Tomáš Vondra 交换了补丁,以实现 libpq 的压缩。

Ian Barwick 和 Greg Sabino Mullane 交换了补丁,通过包含函数参数的数据类型来帮助 psql 制表符自动完成函数。

Mark Dilger 发送了另一个补丁修订版,以添加 contrib 模块 pg_amcheck,这是一个命令行界面,用于针对表和索引运行 amcheck 的验证。

Bharath Rupireddy 发送了另外两个补丁修订版,使在 CTAS 中可以使用并行插入。

Anastasia Lubennikova 发送了另外两个补丁修订版,以在 COPY FREEZE 中设置 PD_ALL_VISIBLE 和可见性映射位。

Masahiko Sawada 发送了一个补丁,用于实现缓冲区加密,以确保 kms 补丁可以与使用 kmgr 管理的加密密钥的其他组件一起使用。

Simon Riggs 发送了另一个补丁修订版,以实现系统版本化的临时表。

Ian Barwick 发送了一个补丁,以修复 attnums 和不存在的列的 has_column_privilege(),方法是即使在用户具有表级权限的情况下也确认列的存在,否则如果提供了无效的 attnum,该函数会很乐意报告用户对已删除或不存在的列具有权限。

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

Atsushi Torikoshi 发送了另一个补丁修订版,以将计划类型(通用或自定义)添加到 pg_stat_statements 中。

Peter Smith 发送了另外两个补丁修订版,使可以将后台工作程序用于 tablesync。

Kyotaro HORIGUCHI 发送了另外两个补丁修订版,使可以在不进行堆重写的情况下更改表的持久性(LOGGED/UNLOGGED)。

Atsushi Torikoshi 发送了另一个补丁修订版,使可以通过新函数 pg_get_target_backend_memory_contexts() 收集指定进程的内存上下文。

John Naylor 发送了一个补丁,用于删除对现在已删除的 replication_timeout GUC 的引用。

Hou Zhijie 发送了另外两个补丁修订版,以向 eval_const_expressions_mutator 添加 Nullif 情况。

Justin Pryzby 发送了另一个 pg_upgrade 补丁修订版,以添加一个测试来执行二进制兼容性。

Álvaro Herrera 发送了另一个补丁修订版,以在 REINDEX CONCURRENTLY 期间设置 PROC_IN_SAFE_IC。

Tomáš Vondra 发送了另外四个补丁修订版,用于为外部表添加批量插入。

Li Japin 和 Bharath Rupireddy 交换了补丁,以修复 ALTER PUBLICATION...DROP TABLE 行为,方法是安排当 rel_sync_cache_publication_cb() 中的条目失效时,将 pubactions 标记为 false,并让 get_rel_sync_entry() 重新计算 pubactions。

Takamichi Osumi 发送了另外三个补丁修订版,以添加新的 wal_level 以禁用 WAL 日志记录,该日志记录旨在通过牺牲中间失败时留下不可恢复的集群为代价来加快批量加载速度。

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

DRU 提交了数据页校验和文档的第三个补丁修订版,并支持在运行中的集群中启用/禁用校验和。

Heikki Linnakangas 和 Andrey Borodin 交换了补丁,以向“pageinspect”添加用于检查 GiST 索引的函数。

Dilip Kumar 提交了另一个补丁修订版,以支持表的自定义压缩方法。

Yuzuko Hosoya 提交了一个补丁,使得可以使用 DISCARD ALL 释放用于引用完整性的 SPI 计划,这将减少在具有多个分区的表上创建或使用外键时使用的内存量。

Stephen Frost 提交了一个补丁,引入了一个过时的附录,将旧术语链接到新文档。

Stephen Frost 提交了另一个补丁修订版,以使用预取进行 ANALYZE,并使自动分析的日志详细信息与自动清理的日志详细信息保持一致。

Michaël Paquier 和 Aleksey Kondratov 交换了补丁,以重构实用程序语句选项。

Peter Eisentraut 提交了 pageinspect 的另一个补丁修订版,该修订版将块号参数更改为 bigint,以避免可能的溢出。

Tomáš Vondra 提交了三个 BRIN 多范围索引实现的补丁修订版。

Heikki Linnakangas 提交了两个补丁修订版,以为了安全和清晰起见,移动了一些 ResourceOwnerEnlarge() 调用,并通过使用单个数组和哈希而不是每个对象类型一个,使资源所有者更容易扩展。

Kyotaro HORIGUCHI 提交了一个补丁,以修复 RelationNeedsWAL 的一些误用。

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

Kyotaro HORIGUCHI 提交了另一个补丁修订版,将统计收集器的临时存储从文件移动到共享内存。

Kyotaro HORIGUCHI 提交了另一个补丁修订版,通过添加 CatCache 过期功能,来保护系统缓存免受负缓存条目的膨胀。

Pavel Stěhule 提交了另一个补丁修订版,以实现模式变量。

Li Japin 提交了一个补丁,修复了 WalSndPrepareWrite 注释中的一个拼写错误。

Simon Riggs 提交了一个补丁,使可以在不验证索引的情况下更改索引的唯一性,并提供一种单独进行验证的方法。

Takayuki Tsunakawa 提交了一个补丁,通过将几个不正确的 += 赋值更改为 = 来修复 shmem TOC 的大小计算。

Peter Geoghegan 提交了一个补丁,将 vacuum_cost_page_miss 的默认值降低到 3。

Ian Barwick 提交了另一个补丁修订版,以将锁获取等待开始时间添加到 pg_lock_status 函数。

Andy Fan 提交了一个补丁,使 cost_sort 更准确。

Masahiko Sawada 提交了另一个补丁修订版,使可以进行涉及多个 postgres 外部服务器的事务。

Fujii Masao 和 Bharath Rupireddy 交换了补丁,以添加一个 postgres_fdw 函数来丢弃缓存的连接,以及一个 postgres_fdw 特定的 GUC 和一个系统范围的 GUC,keep_connections。

Hou Zhijie 提交了一个补丁,以从 reorderbuffer.c 中的注释中删除一个多余的撇号。

Álvaro Herrera 提交了一个补丁,使 VACUUM 在计算要删除的元组的 Xid 地平线时忽略正在进行 CIC 和 RC 的进程。

Álvaro Herrera 提交了一个补丁,以增加 pg_commit_ts 缓冲区的大小。

David Zhang 提交了一个补丁,更新了表空间文档,使其与 pgbench 的新表访问方法选项保持一致。

Iwata Aya 提交了另一个补丁修订版,以启用 libpq 的跟踪。

Tomáš Vondra 提交了两个补丁修订版,以涵盖具有扩展统计信息的表达式。

Tom Lane 提交了一个补丁,以修复 pull_varnos() 中的错误计算。

Thomas Munro 提交了另一个补丁修订版,使 pgbench 可以延迟查询直到建立连接。