PostgreSQL 每周新闻 - 2021 年 3 月 14 日

发布于 2021-03-15,作者:PWN
PWN

PostgreSQL 每周新闻 - 2021 年 3 月 14 日

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

3 月份的 PostgreSQL 工作

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

PostgreSQL 新闻

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

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

请在太平洋标准时间(PST8PDT)星期日下午 3:00 前将新闻和公告提交至 david@fetter.org。

已应用的补丁

Amit Kapila 推送了

Tom Lane 推送了

  • 进一步调整 regex DFA 的内存管理。在提交 190c79884 之后,Coverity 仍然不满意,仔细观察后,我认为它可能发现了问题。如果 v->err 设置为非零值,则 newdfa() 的调用者通常会退出,如果失败,newdfa() 会忠实地执行此操作。但是,如果我们在进入 newdfa() 之前 v->err 已经是非零值会怎么样?那么 newdfa() 可能会成功,调用者会立即泄漏其结果。我认为这种情况实际上不会发生,但是谓词“在调用 newdfa() 时 v->err 始终为零”似乎很难完全确定;有大量的代码可能会出错。调整调用者以直接检查空结果,而不是依赖 ISERR() 测试,似乎更好。无论如何,这比以前的编码稍微便宜一些。由于没有证据表明存在任何真正的错误,因此不向后移植。https://git.postgresql.org/pg/commitdiff/6c20bdb2a279086777a3595ab00bcf14671fc5a1

  • 验证 pg_import_system_collations() 的 OID 参数。"SELECT pg_import_system_collations(0)" 导致断言失败。使用随机非零参数---或者实际上在非断言构建中使用零---它会很乐意创建带有 collnamespace 垃圾值的 pg_collation 条目。就我所知,这些是无害的(除非也许 OID 碰巧在以后用于模式?)。无论如何,这不是安全问题,因为该函数仅限超级用户使用。但对于粗心的 DBA 来说,这似乎是一个陷阱,所以让我们添加一个检查,以确保给定的 OID 属于某个模式。向后移植到引入此函数的 v10。https://git.postgresql.org/pg/commitdiff/5c06abb9b97b69513a3998cccf89556e73052e02

  • 正确地将 pg_stat_get_subscription() 标记为返回集合。此函数的初始目录数据未能设置 proretset 或提供 prorows 估计值。当在 FROM 子句中调用时,它意外地正常工作了,因为执行器对此不太挑剔;但是规划器不希望该函数返回多行,这可能会导致错误的计划。此外,如果该函数在 SELECT 列表中调用,则会失败。我们不能轻易地向后移植此修复,但幸运的是,在大多数情况下,该错误的后果并不严重。正确地处理此问题主要是为了面向未来。讨论:https://postgr.es/m/1636062.1615141782@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/fed10d4eec79242688382d03ddca82007160ee6f

  • 如果 FROM 中的函数不应该返回集合却返回了,则发出抱怨。如果 FROM 中的函数尝试返回集合,但未标记为 proretset,则会抛出“函数协议违规”错误。尽管目前这些情况有效,但我们似乎不希望保证它会继续工作。此外,不设置 proretset 标志还会带来其他负面后果,例如可能会出现错误的计划。不向后移植,因为如果有任何第三方代码违反此期望,人们不会希望我们在次要版本中破坏它。讨论:https://postgr.es/m/1636062.1615141782@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/d4545dc19b8ea670bf62e06d22b0e4e6fcb45153

  • 文档:修复了对过程 OUT 参数的遗漏提及。提交 2453ea142 中的一个小疏忽。https://git.postgresql.org/pg/commitdiff/3ebc6d295705fec37dc8f57a4ece54b370f55f72

  • 文档:改进有关过程的介绍性信息。通过在项目符号列表中列出函数和过程之间的主要区别,阐明“用户定义的过程”中的讨论。值得注意的是,这避免了隐藏有关过程能够进行事务控制的先机。使 CREATE FUNCTION 参考页中的反向链接更加突出,并在 CREATE PROCEDURE 中添加一个。根据 Guyren Howe 的抱怨。感谢 David Johnston 的讨论。讨论:https://postgr.es/m/BYAPR03MB4903C53A8BB7EFF5EA289674A6949@BYAPR03MB4903.namprd03.prod.outlook.com https://git.postgresql.org/pg/commitdiff/227338b00d498d9e1c5705a1ab118585e5d57c87

  • 文档:移除 <foreignphrase> 标签。我们用斜体标记了部分 “per se”、“pro forma” 和 “ad hoc”,但并非全部。这些短语在正式英语中很常见,因此它们是否算是外来语还存在争议。我们可以尝试更一致地使用 <foreignphrase>,但这很难强制执行,所以我们直接移除这些词的标签。唯一看起来应该保留标签的情况是 “voilà”。与其只保留一个标签实例,不如将其更改为更标准的短语。John Naylor 讨论:https://postgr.es/m/CAFBsxsHtWs_NsccAVgQ=tTUKkXHpHdkjZXtp_Cd9dGWyBDxfbQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/b12436340adf27aa3d334c92579e6662dd3090ce

  • 避免为继承的 FK 约束创建重复的缓存计划。当外键约束应用于分区表时,每个叶子分区都会继承类似的 FK 约束。我们之前是独立处理所有这些约束的,这意味着在大型分区树中,我们会建立大量的缓存 FK 检查查询计划。然而,除了一个例外,所有情况下生成的查询对于继承树的所有成员实际上都是相同的(因为在大多数情况下,查询仅提及 FK 关系另一侧的最顶层表)。因此,我们可以在所有分区之间共享一个缓存计划,从而节省内存,更不用说构建和维护缓存计划的时间了。 Keisuke Kuroda 和 Amit Langote 讨论:https://postgr.es/m/cab4b85d-9292-967d-adf2-be0d803c3e23@nttcom.co.jp_1 https://git.postgresql.org/pg/commitdiff/c3ffe34863688115dd7878f118f2a123bafd8a26

  • 重新简化 pqParseInput3 子例程中 inStart 的管理。提交 92785dac2 将一些与 inStart 前进相关的逻辑从 pqParseInput3 复制到了 getRowDescriptions 和 getAnotherTuple 中,因为它希望允许用户定义的行处理器回调函数可能会从库中 longjmp 出去,并且必须在此之前更新 inStart 以避免无限循环。我们后来认为该 API 非常脆弱并将其还原了,但我们没有撤销所有相关的代码更改,并且这一混乱仍然存在。现在撤销它,以便在 pqParseInput3 的处理中只有一个地方会前进 inStart;这将简化添加更好的跟踪支持。 getParamDescriptions 在某个时候也增长了类似的处理(不是在 92785dac2 中;我没有追踪到具体时间),但它实际上有错误,因为它对损坏消息的处理似乎是从 v2 逻辑中复制的,当时我们缺少已知消息长度。我们 “goto not_enough_data” 的情况不应简单地返回 EOF,因为这样我们就不会消耗该消息,可能会创建一个无限循环。这种情况现在表示一个绝对损坏的消息,我们应该将其报告为错误。尽管没有发现 getParamDescriptions 陷入循环的现场报告,但将此修复程序向后移植似乎是合适的。我选择向后移植所有这些,以使逻辑在支持的分支中看起来更相似。讨论:https://postgr.es/m/2217283.1615411989@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/51c54bb603098416dc6f9d9d46a3d14861f8fc38

  • 禁止将标识列标记为可为空。GENERATED ALWAYS AS IDENTITY 暗示 NOT NULL,但如果你使用 “GENERATED ALWAYS AS IDENTITY NULL” 覆盖它,代码将无法报错。有人可能认为旧的行为是一个特性,但它不一致,因为结果会根据子句的顺序而变化,因此它似乎只是一个疏忽。根据 Pavel Boev 的错误 #16913。向后移植到引入标识列的 v10。Vik Fearing(我做了少量调整)讨论:https://postgr.es/m/16913-3b5198410f67d8c6@postgresql.org https://git.postgresql.org/pg/commitdiff/f52c5d6749a61fc4e0908457c58f5069910d53a6

  • 修复 psql \e 检测文件修改时的竞争条件。psql 的编辑命令通过检查修改时间戳的变化来判断用户是否编辑了文件。对于预先存在的文件,这可能没问题,但对于在命令中创建的临时文件,快速输入的用户可能会在 stat(2) 时间戳的 1 秒精度内保存并退出。在 Windows FAT 文件系统上,精度甚至更差,为 2 秒,使得竞争更容易发生。为了修复此问题,请尝试将临时文件的修改时间设置为两秒前。这不太可能失败,但反过来,竞争条件本身也不太可能发生,因此只需忽略任何错误。此外,我们不妨同时检查文件大小及其修改时间。虽然这是一个很难触发的错误,但为了确保用户的编辑不会丢失,仍然值得向后移植。Laurenz Albe,根据 Jacob Champion 的抱怨;基于 Jacob 和我自己的修复建议讨论:https://postgr.es/m/0ba3f2a658bac6546d9934ab6ba63a805d46a49b.camel@cybertec.at https://git.postgresql.org/pg/commitdiff/48d67fd897918c72e7cdf703d794056b88ed5725

  • pg_amcheck:继续尝试修复测试。修复测试中另一个非可移植的选项顺序示例。24189277f 中的疏忽。Mark Dilger 讨论:https://postgr.es/m/C37D28BA-3BA3-4776-B812-17F05F3472D8@enterprisedb.com https://git.postgresql.org/pg/commitdiff/9e294d0f34d6e3e4fecf6f190b48862988934cde

  • 文档:添加关于如何运行 pg_amcheck 回归测试的注释。在这里,您需要做什么才能使 “make installcheck” 工作并不明显,因此请按照我们在其他地方使用的方式进行记录。https://git.postgresql.org/pg/commitdiff/58f57490facdec78119e5bab84229dbdc1d5ac6a

Michaël Paquier 推送

  • 移除对 SSL 压缩的支持。PostgreSQL 从 e3bdb2d 开始禁用压缩,并且文档建议不要使用它。此外,OpenSSL 从 1.1.0 版本开始禁用 SSL 压缩,并且许多发行版在此之前很久就禁用了它。最新的 TLS 版本 TLSv1.3 在协议级别禁止压缩。此提交删除了该功能本身,删除了对 libpq 参数 sslcompression 的支持(出于与现有连接字符串的兼容性原因,该参数仍然列出,但会被忽略),并删除了 pg_stat_ssl 和事实上的 PgBackendSSLStatus 中的等效字段。请注意,除了通过配置删除激活压缩的功能外,前端和后端都主动禁用压缩,以避免本地配置的覆盖。为已弃用的 SSL 参数添加了一个 TAP 测试,以便在向后兼容后进行检查。提升目录版本。作者:Daniel Gustafsson 审核人:Peter Eisentraut,Magnus Hagander,Michael Paquier 讨论:https://postgr.es/m/7E384D48-11C5-441B-9EC3-F7DB1F8518F6@yesql.se https://git.postgresql.org/pg/commitdiff/f9264d1524baa19e4a0528f033681ef16f61b137

  • 在 COPY 中添加对更多进度报告的支持。命令(TO 或 FROM)、其类型(文件、管道、程序或回调)以及 COPY FROM 中被 WHERE 子句排除的元组数量已添加到已有的进度报告中。“lines_processed” 列已重命名为 “tuples_processed”,以消除 CSV 和 BINARY COPY 情况下列的含义歧义,并使其与其他的目录进度视图更加一致。再次提升目录版本。作者:Matthias van de Meent 审核人:Michael Paquier,Justin Pryzby,Bharath Rupireddy,Josef Šimánek,Tomas Vondra 讨论:https://postgr.es/m/CAEze2WiOcgdH4aQA8NtZq-4dgvnJzp8PohdeKchPkhMY-jWZXA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/9d2d45700928d49212fb7ed140feeaebe3a6014f

  • 将 sslcompression 切换回 libpq 中的普通输入字段。根据 buildfarm 成员 crake 的说法,任何包含设置了此选项的 postgres_fdw 服务器的服务器都将无法正确执行 pg_upgrade,因为该选项在 f9264d1 中被隐藏为调试选项,从而导致 FDW 服务器的还原失败。这会将 libpq 中的选项改回可见,但仍处于非活动状态以解决此升级问题。讨论:https://postgr.es/m/YEbq15JKJwIX+S6m@paquier.xyz https://git.postgresql.org/pg/commitdiff/096bbf7c934a4288c9e48a6ac8e91d8753ac1ccd

  • 还原 libpq 中 SSL 压缩的更改。这部分还原了 096bbf7 和 9d2d457,撤销了 libpq 的更改,因为它可能会导致在多个 Postgres 主要版本中共享一个 libpq 版本的扩展和应用程序出现问题。请注意,后端在此处没有更改,它仍然禁用 SSL 压缩,同时简化了跟踪 SSL 连接是否启用压缩的底层目录。根据与 Tom Lane 和 Daniel Gustafsson 的讨论。讨论:https://postgr.es/m/YEbq15JKJwIX+S6m@paquier.xyz https://git.postgresql.org/pg/commitdiff/0ba71107efeeccde9158f47118f95043afdca0bb

  • 将表空间路径重新创建从 makefiles 移动到 pg_regress。将此逻辑移至 pg_regress 可以修复并行测试中 pg_upgrade 和主回归测试套件都触发 makefile 规则的潜在故障,该规则清理了 src/test/regress 下的 testtablespace/。即使 pg_upgrade 触发了此规则,它也没有必要这样做,因为它使用了不同的表空间路径。因此,如果 pg_upgrade 在主回归测试套件运行表空间案例时触发了表空间设置的 makefile 规则,则会导致失败。 61be85a 是类似的尝试来实现这一目标,但这破坏了回归测试需要在管理员帐户下运行的情况,例如 Appveyor。报告者:Andres Freund,Kyotaro Horiguchi 审核人:Peter Eisentraut 讨论:https://postgr.es/m/20201209012911.uk4d6nxcnkp7ehrx@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/6c788d9f6aadb41d76a72d56149268371a7895ee

  • 为 libpq 中所有连接线程设置 libcrypto 回调。基于对 Jacob 参与的 OpenSSL 代码的分析,将加密哈希计算迁移到 EVP 需要设置 libcrypto 回调,而这些回调之前仅为 SSL 连接设置,非 SSL 连接则没有设置。如果在加密哈希计算期间发生故障,不设置回调会导致使用线程的连接(在身份验证期间调用加密哈希,例如 MD5 或 SCRAM)存在潜在的不安全性。然后,设置 libssl 和 libcrypto 状态的逻辑被分为两个部分,两者都使用相同的锁,libcrypto 为 SSL 和非 SSL 连接设置,而 SSL 连接则在需要时设置任何 libssl 状态。在此提交之前,只有 SSL 连接会设置 libcrypto 回调,这些回调对于确保在 libpq 中使用多个并发线程时进行正确的线程锁定是必要的 (ENABLE_THREAD_SAFETY)。请注意,这仅对于 OpenSSL 1.0.2 和 1.0.1(HEAD 上支持的最旧版本)是必需的,因为 1.1.0 有其自己的内部锁定,并且已放弃对 CRYPTO_set_locking_callback() 的支持。使用 OpenSSL 1.0.1 和 1.0.2,混合 SSL 和非 SSL 连接线程进行的最多 300 个线程的测试,在进行一些微基准测试后没有显示任何性能影响。可以使用 pgbench 并使用 -C 和一个几乎为空的脚本(例如,使用一个 \set 元命令)来强调身份验证请求,并且我们将其与一些用于测试的自定义程序混合使用。报告者:Jacob Champion 作者:Michael Paquier 审阅者:Jacob Champion 讨论:https://postgr.es/m/fd3ba610085f1ff54623478cf2f7adf5af193cbb.camel@vmware.com https://git.postgresql.org/pg/commitdiff/2c0cefcd18161549e9e8b103f46c0f65fca84d99

Fujii Masao 推送

  • 跟踪写入和同步 WAL 数据到磁盘的总时间。此提交添加了新的 GUC track_wal_io_timing。启用此选项后,XLogWrite 写入和 issue_xlog_fsync 同步 WAL 数据到磁盘的总时间将在 pg_stat_wal 中进行计数。此信息有助于检查 WAL 写入和同步对性能的影响。启用 track_wal_io_timing 会使服务器在每次写入或同步 WAL 时都向操作系统查询当前时间,这可能会在某些平台上造成显著的开销。为了避免在启用了 track_io_timing 的服务器中出现此类额外开销,此提交引入了 track_wal_io_timing 作为与 track_io_timing 分开的参数。请注意,walreceiver 的 WAL 写入和同步活动尚未跟踪。此提交使服务器还跟踪 XLogWrite 写入和 issue_xlog_fsync 同步 WAL 数据到磁盘的次数,无论 track_wal_io_timing 的设置如何,都在 pg_stat_wal 中。这些计数器可用于计算每个请求的 WAL 写入和同步时间等。增加 PGSTAT_FILE_FORMAT_ID。增加目录版本。作者:Masahiro Ikeda 审阅者:Japin Li,Hayato Kuroda,Masahiko Sawada,David Johnston,Fujii Masao 讨论:https://postgr.es/m/0509ad67b585a5b86a83d445dfa75392@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/ff99918c625a84c91e7391db9032112ec8653623

  • 强制在 walwriter 退出时将剩余的 WAL 统计信息发送到统计收集器。在 walwriter 的主循环中,仅当自上次发送以来经过足够的时间以达到 PGSTAT_STAT_INTERVAL 毫秒时,才会发送 WAL 统计信息消息。这是避免统计收集器过载所必需的。但是,这可能会导致 walwriter 退出时未发送最近的 WAL 统计信息。为了确保发送所有 WAL 统计信息,此提交使 walwriter 在因关闭请求而退出时强制将剩余的 WAL 统计信息发送到收集器。请注意,当 walwriter 以非零退出代码退出(例如,FATAL 错误)时,这些剩余的 WAL 统计信息可能仍然不会发送。这没问题,因为该 walwriter 退出会导致服务器崩溃,并且随后的恢复会丢弃所有统计信息。因此,在这种情况下,无需发送剩余的统计信息。作者:Masahiro Ikeda 审阅者:Fujii Masao 讨论:https://postgr.es/m/0509ad67b585a5b86a83d445dfa75392@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/33394ee6f2433d3cc7785428a77cc9a813254df7

  • 将关闭检查点期间收集的统计信息发送到统计收集器。当请求关闭时,检查点程序会执行检查点或重启点,并在退出之前更新统计信息。但是以前,检查点程序没有将这些统计信息发送到统计收集器。关闭检查点和重启点被视为请求的检查点和重启点,而不是计划的检查点和重启点,因此它们的数量在 pg_stat_bgwriter.checkpoints_req 列中进行计数。作者:Masahiro Ikeda 审阅者:Fujii Masao 讨论:https://postgr.es/m/0509ad67b585a5b86a83d445dfa75392@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/b82640df0062483431608b7e9e074255f03e6c02

Peter Eisentraut 推送

Alexander Korotkov 推送

Thomas Munro 推送

Bruce Momjian 推送

Peter Geoghegan 推送

  • 在 nbtree VACUUM 中不考虑新插入的元组。删除 nbtree VACUUM 中“过时的统计信息”的整个概念(停止关心涉及插入元组数量的统计信息)。还删除了主分支上的 vacuum_cleanup_index_scale_factor GUC/参数(尽管只是在 postgres 13 上禁用它们)。vacuum_cleanup_index_scale_factor/统计信息接口使 nbtree AM 部分负责决定何时需要更新 pg_class.reltuples 统计信息。这似乎有悖于索引 AM API 的精神,尽管如此——对于索引 AM 的批量删除和清理回调来说,在不方便时提供准确的统计信息实际上没有必要。核心代码拥有该权限。(索引 AM 有权根据自己的考虑执行或不执行某些类型的延迟清理,例如页面删除和回收,但这与 pg_class.reltuples/num_index_tuples 几乎没有关系。)直到提交 b07642db 引入 autovacuum_vacuum_insert_threshold 功能之前,这个问题都是相当无害的,它与 vacuum_cleanup_index_scale_factor 机制有不希望的交互:它使插入驱动的自动清理执行完整的索引扫描,即使这样做没有真正的好处。这与一个仅附加插入基准测试 [1] 的回归有关。此外,在仅清理的 nbtree VACUUM 期间执行索引完整扫描的剩余情况表明,最终的元组计数只是一个估计值。这可以防止 vacuumlazy.c 在这些情况下设置索引的 pg_class.reltuples(它现在仅在 vacuumlazy.c 具有 nbtree 用于批量删除的 TID 时才更新 pg_class)。这可以说修复了重复数据删除相关修复提交 48e12913 中的疏忽。[1] https://smalldatum.blogspot.com/2021/01/insert-benchmark-postgres-is-still.html 作者:Peter Geoghegan pg@bowt.ie 审核人:Masahiko Sawada sawada.mshk@gmail.com 讨论:https://postgr.es/m/CAD21AoA4WHthN5uU6+WScZ7+J_RcEjmcuH94qcoUPuB42ShXzg@mail.gmail.com 向后移植:13-,其中添加了 autovacuum_vacuum_insert_threshold。https://git.postgresql.org/pg/commitdiff/9f3665fbfc34b963933e51778c7feaa8134ac885

  • VACUUM ANALYZE:始终更新 pg_class.reltuples。vacuumlazy.c 有时无法更新每个索引的 pg_class 条目(以确保 pg_class.reltuples 是最新的),即使 analyze.c 假设这必须在 VACUUM ANALYZE 期间发生。至少有两个原因可以解释这一点。例如,vacuumlazy.c 在索引 AM 指出其统计信息只是一个估计值时,可能无法更新 pg_class,这符合 2006 年提交 e57345975cf 建立的 amvacuumcleanup() 例程的约定。停止假设 pg_class 必须在 VACUUM ANALYZE 中使用准确的统计信息进行更新——在所有情况下,都与表关系同时更新索引的 pg_class。这样,VACUUM ANALYZE 将永远不会无法保持 pg_class.reltuples 的合理准确性。这种方法(与旧方法相比)的唯一缺点是,它可能会为堆关系最终具有相同不准确值的索引不准确地设置 pg_class.reltuples。这似乎不太糟糕。我们已经在任何 VACUUM ANALYZE 期间一致地两次为堆/表关系调用 vac_update_relstats()(以更新 pg_class)——一次在 vacuumlazy.c 中,一次在 analyze.c 中。我们现在确保为每个索引至少调用一次(尽管通常是两次)vac_update_relstats()。这是对提交 9f3665fb 的后续工作,该提交处理了 btvacuumcleanup() 中的问题。从技术上讲,这修复了一个不相关的问题。在提交 9f3665fb 之后(当在有问题的 VACUUM 操作期间没有 btbulkdelete() 调用时),btvacuumcleanup() 不再提供准确的 num_index_tuples 值,但 hashvacuumcleanup() 多年来一直以相同的方式工作。作者:Peter Geoghegan pg@bowt.ie 审核人:Masahiko Sawada sawada.mshk@gmail.com 讨论:https://postgr.es/m/CAH2-WzknxdComjhqo4SUxVFk_Q1171GJO2ZgHZ1Y6pion6u8rA@mail.gmail.com 向后移植:13-,就像提交 9f3665fb 一样。https://git.postgresql.org/pg/commitdiff/5f8727f5a679452f7bbdd6966a1586934dcaa84f

  • 文档:B 树只有一个附加参数。提交 9f3665fb 中的疏忽。向后移植:13-,就像提交 9f3665fb 一样。https://git.postgresql.org/pg/commitdiff/3f0daeb02f8dd605f89de9aa2349137c09cc7fb4

  • 添加回 vacuum_cleanup_index_scale_factor 参数。提交 9f3665fb 删除了 vacuum_cleanup_index_scale_factor 存储参数。但是,在跨主要版本移动时,这会产生转储/重新加载的风险。添加回 vacuum_cleanup_index_scale_factor 参数(尽管不是同名的 GUC),纯粹是为了避免在使用 pg_upgrade 等工具时出现问题。该参数保持禁用和未记录状态。没有向后移植到 Postgres 13,因为 vacuum_cleanup_index_scale_factor 只是首先被 REL_13_STABLE 版本的 master 分支提交 9f3665fb 禁用的——该参数在 REL_13_STABLE 上已经看起来是这样的。讨论:https://postgr.es/m/YEm/a3Ko3nKnBuVq@paquier.xyz https://git.postgresql.org/pg/commitdiff/effdd3f3b633e88feaa675377075f02ecc99aee4

  • 在 nbtree VACUUM 期间节省一些周期。在清理 nbtree VACUUM 操作期间,在没有删除但尚未回收的页面要回收的常见情况下,避免不必要地调用 RelationGetNumberOfBlocks()。这是对提交 e5d8a999 的后续操作,该提交(除其他外)教会了“跳过完整扫描” nbtree VACUUM 机制仅在索引中删除页面的绝对数量被认为过多时才触发完整的索引扫描。https://git.postgresql.org/pg/commitdiff/7bb97211a5589265f3f88183ae9353639ab184c6

  • 整合 nbtree VACUUM 元页例程。简化 _bt_vacuum_needs_cleanup() 函数的签名(现在它只需要一个 'rel' 参数),并将其移动到 nbtpage.c 中其同级函数旁边。我认为 _bt_vacuum_needs_cleanup() 最初位于 nbtree.c 中是由于包含依赖问题。现在这不是问题了。提交 9f3665fb 的后续改进。https://git.postgresql.org/pg/commitdiff/02b5940dbea17d07a1dbcba3cbe113cc8b70f228

Robert Haas 推送了

待定补丁

Etsuro Fujita 发送了另一个补丁修订版,以实现 postgres_fdw 节点上的异步追加。

Kyotaro HORIGUCHI 发送了一个补丁,以在 wal_level=minimal 的情况下运行 011_crash_recovery.pl,并确保发布的 XID 是持久的。

Ibrar Ahmed 发送了另一个 pg_rewind 补丁修订版,该补丁修复了当服务器刚刚通过查看控制文件中的 minRecoveryPointTLI 以及检查点上的 ThisTimeLineID 来确定 TLI 的方式。

Ibrar Ahmed 发送了另一个补丁修订版,以将 popcount 公开到 SQL。

Kota Miyake 发送了另一个补丁修订版,通过要求 pgbench 的 \sleep 命令接受一个整数参数来修复其工作方式。

Michael Banck 发送了另一个补丁修订版,以添加一个新的 PGC_ADMINSET guc 上下文和 pg_change_role_settings 默认角色。

Andrey Borodin 发送了另一个补丁修订版,以添加用于对 gist_btree 类型进行 GiST 构建的 Sortsupport。

Pavel Stěhule 发送了一个补丁,为类型记录添加运算符 ? 和 ->>,以及函数 record_keys 和 record_each_text。

Ajin Cherian 发送了一个补丁,使 stream_prepare_cb 成为可选的,这允许插件不允许同时在逻辑复制中启用流式传输和两阶段提交。

Ibrar Ahmed 发送了另一个补丁修订版,以在规划时评估另外两种情况的表达式。

Joel Jacobson 发送了另外四个补丁修订版,以添加视图 pg_permissions 和 pg_ownerships,这大大简化了建立这些内容的查询。

Ibrar Ahmed 发送了另一个补丁修订版,以实现系统版本的时间表。

Tomáš Vondra 发送了另外两个补丁修订版,以实现 BRIN 多范围索引。

Tomáš Vondra 和 Stephen Frost 交换了补丁,以通过在启用 track_io_timing 的情况下包含 I/O 计时来改进自动清理和自动分析的日志记录。此外,对于自动分析,添加读取速率和脏速率,类似于历史上如何记录自动清理的信息。

Masahiro Ikeda 和 Fujii Masao 交换了补丁,以在关闭时发送 walwriter 和检查点器的统计信息。

Dilip Kumar 和 Justin Pryzby 交换了补丁,以实现表自定义压缩方法。

Bharath Rupireddy 发送了另一个补丁修订版,以实现 EXPLAIN [ANALYZE] REFRESH MATERIALIZED VIEW。

Greg Nancarrow 和 Hou Zhijie 交换了补丁,以实现并行 INSERT (INTO ... SELECT ...)。

Ibrar Ahmed 和 Kazutaka Onishi 交换了补丁,以在外部表上实现 TRUNCATE。

Peter Smith 和 Ajin Cherian 交换了补丁,以实现两阶段事务的逻辑解码。

Tatsuo Ishii 发送了两个补丁修订版,以使在 pgbench 中可以使用 COPY FREEZE。

Peter Smith 发送了一个补丁,让 tablesync 工作进程有机会查看它是否可以立即退出(因为它已经赶上),而无需先处理消息才能发现这一点。

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

Arseny Sher 提交了一个补丁,增加了用于仅索引扫描的虚拟机缓存。

Peter Eisentraut 提交了另一个补丁修订版,为 SQL 语言添加了对编写 CREATE FUNCTION 和 CREATE PROCEDURE 语句的支持,该语句的函数体符合 SQL 标准,并且可以移植到其他实现。

Heikki Linnakangas 提交了另一个补丁修订版,为了安全性和清晰性,移动了一些 ResourceOwnerEnlarge() 调用,使 resowner 更易于扩展,并在可用时使用 64 位 murmur 哈希以加快速度。

Tomáš Vondra 提交了另一个补丁修订版,使用新的 GUC(remove_temp_files_after_crash)控制崩溃后临时文件的删除。

Jacob Champion 提交了两个补丁修订版,将客户端的 DN 存储在 port->peer_dn 中,并使用它从所有身份验证后端记录已验证的身份。

Joel Jacobson 提交了另一个补丁修订版,以实现 regexp_positions。

Justin Pryzby 提交了一个补丁,使 pg_dump 在 getBlobs 中使用游标,以缓解在存在数百万个大型对象的情况下使用大量内存的问题。

Tomáš Vondra 提交了另一个补丁修订版,以提高 GROUP BY 的效率。

Erica Zhang 提交了两个补丁修订版,为 contrib 下的 pg_stat_statements 兼容性验证添加了一些测试。

Matthias van de Meent 提交了三个补丁修订版,当页面的行指针数组具有尾随的未使用 ItemIds 时,对其进行截断。这将允许重用实际上空闲的空间来存储数据和新的行指针,而不是仅仅为行指针保留空间。另一个好处是,HasFreeLinePointers 提示位优化现在不会提示数组末尾有空闲行指针,稍微提高了空闲行指针位置的精确性;并且避免了我们需要搜索到数组末尾的情况(如果所有其他条目都已填充)。

Magnus Hagander 提交了另一个补丁修订版,以添加 PROXY 协议支持。

Floris Van Nee 提交了另一个补丁修订版,允许将元组插入几乎为空的页面。

Marcus Wanner 提交了一个补丁,为输出插件的 filter_prepare 回调添加了一个 xid 参数。

Kyotaro HORIGUCHI 和 Fujii Masao 交换了补丁,将统计收集器使用的临时存储从文件更改为共享内存。

Amul Sul 和 Ibrar Ahmed 交换了补丁,加入了一些机制,使得实现 ALTER SYSTEM READ {ONLY|WRITE} 成为可能。

Masahiko Sawada 提交了另一个补丁修订版,使 autovacuum 日志更具信息性。

Bharath Rupireddy 提交了另一个补丁修订版,为多重和单一插入添加新的表访问方法 (AM),并将其用于 CTAS、REFRESH MATERIALIZED VIEW 和 COPY。

Yuzuko Hosoya 提交了另一个补丁修订版,使用 DISCARD ALL 为引用完整性释放 SPI 计划。

John Naylor 提交了一个补丁,删除了文档中的 <foreignphrase> 标签。

John Naylor 提交了一个补丁,使 popcount xor 尝试在缓冲区级别进行间接寻址。

Masahiko Sawada 提交了一个补丁,从 vacuumlazy.c 中删除不必要的 bsearch。

Craig Ringer 提交了另一个补丁修订版,将目标 LWLock* 和 tranche ID 传递给 LWLock 跟踪点,添加到 LWLock 例程中的跟踪点,并为启动时的后端类型和 postmaster pid 添加 SDT 跟踪点。

Bharath Rupireddy 提交了两个补丁修订版,使 check_publication_add_relation 中的错误消息更具信息性和一致性。

Iwata Aya、Álvaro Herrera 和 Tom Lane 交换了补丁,为 libpq 添加跟踪功能。

David Rowley 提交了两个补丁修订版,用于缓存 PathTarget 和 RestrictInfo 的易变性,允许 estimate_num_groups() 返回有关估计的更多详细信息,允许 simplehash.h 的用户执行直接删除,添加 Result Cache 执行器节点,并删除 nodeResultCache.c 中的代码重复。

Nathan Bossart 和 Laurenz Albe 交换了补丁,以记录 ALTER ROLE ... SET ROLE。

Mark Dilger 和 Robert Haas 交换了补丁,添加了一个前端实用程序程序 pg_amcheck。

Peter Geoghegan 提交了另一个补丁修订版,以回收在同一 VACUUM 期间删除的页面。

Thomas Munro 提交了另一个补丁修订版,在共享内存中跟踪关系大小,为 smgrnblocks() 提供无锁快速路径,并将 fifo 更新为 lru 以清除有效缓存。

Thomas Munro 提交了一个补丁,通过使用 pg_procno 而不是扫描 ProcArray 并跟踪启动进程,使 ProcSendSignal() 更加高效。

Hou Zhijie 提交了另一个补丁修订版,避免在执行引用表的 INSERT INTO 时在 RI 触发器中执行 CommandCounterIncrement。

Álvaro Herrera 提交了另一个补丁修订版,以实现 ALTER TABLE ... DETACH PARTITION CONCURRENTLY。

Álvaro Herrera 提交了两个补丁修订版,以实现 libpq 的批处理/流水线支持。

Fabien COELHO 和 Dean Rasheed 交换了补丁,向 pgbench 添加了一个伪随机排列函数。

Bruce Momjian 提交了另一个补丁修订版,以添加密钥管理。

Takayuki Tsunakawa 提交了另一个补丁修订版,以加速 COPY FROM 到具有外部分区表的进程。

Hao Wu 提交了一个旨在修复以下错误的补丁:在节点升级后 HotStandbyActive() 返回 true。

Takayuki Tsunakawa 提交了两个补丁修订版,以修复在计数要失效的缓冲区数量时发生的溢出。

Andrey Borodin 提交了另一个补丁修订版,使所有 SLRU 缓冲区大小可配置。

Tom Lane 提交了两个补丁修订版,以清理 PL/pgsql 中变量用法的文档。

Thomas Munro 提交了另一个补丁修订版,在崩溃恢复中运行检查点进程和后台工作进程,在崩溃恢复后记录缓冲区统计信息,并使其可以不等待恢复结束的检查点。

Justin Pryzby 提交了两个补丁修订版,以允许 wal_compression 的替代压缩方法。

Mark Rofail 和 Justin Pryzby 交换了补丁,以实现外键数组。

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

Michaël Paquier 和 Soumyadeep Chakraborty 交换了补丁,以修复 PITR 和 2PC 之间的不协调。

Pavel Stěhule 提交了两个补丁修订版,为 PL/pgsql 添加 #routine_label pragma。

Thomas Munro 提交了一个补丁,向 sort_template.h 添加 bsearch 和 unique 模板,为一些常见的标量类型提供排序/搜索专业化,在明显的地方使用 qsort_oid() 及其友元,为 ItemPtrData 提供专门的排序/搜索例程,在各种地方使用 qsort_itemptr() 及其友元,专门为 ANALYZE 使用“编码”格式的 HeapTuple 排序例程,基于可以通过减法比较的 48 位整数,避免分支,专门化 tidbitmap.c 中的 pagetable 排序例程,专门化 nbtree 代码中的一些排序/搜索例程,并专门化 multixact.c 使用的排序例程。

Julien Rouhaud 提交了另一个补丁修订版,将 pg_stat_statements 查询打乱移动到核心,在 pg_stat_activity 和 log_line_prefix 中公开 queryid,并在详细的 explain 中公开查询标识符。

Dmitry Dolgov 提交了另一个补丁修订版,以引入跳跃扫描。

Julien Rouhaud 提交了另一个补丁修订版,为 REINDEX 命令添加新的 OUTDATED 过滤工具,并为 reindexdb 添加相应的 --outdated 选项。

Alexander Lakhin 提交了一个补丁,在 pgwin32_open 中使用 microsoft_native_stat。

Thomas Munro 提交了两个补丁修订版,用于在 Linux 上为 SyncDataDirectory() 可选地使用 syncfs()。