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

PostgreSQL 周刊新闻 - 2021 年 2 月 21 日

发布于 2021-02-22,作者:PWN
PWN

PostgreSQL 周刊新闻 - 2021 年 2 月 21 日

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

PostgreSQL 产品新闻

JDBC 42.2.19 已发布 https://jdbc.postgresql.ac.cn/documentation/changelog.html#version_42.2.19

Pgpool-II 4.2.2, 4.1.6, 4.0.13, 3.7.18 和 3.6.25 发布,这是一个 PostgreSQL 的连接池和语句复制系统。 https://www.pgpool.net/docs/42/en/html/release-4-2-2.html

pgBadger v11.5 发布,这是一个用 Perl 编写的 PostgreSQL 日志分析器和图表工具。 https://github.com/darold/pgbadger/releases

pg_probackup 2.4.10 发布,这是一个用于管理 PostgreSQL 数据库集群备份和恢复的实用程序。 https://github.com/postgrespro/pg_probackup/releases/tag/2.4.10

pgFormatter 5.0 发布,这是一个 SQL 代码格式化/美化工具。 https://github.com/darold/pgFormatter/blob/master/ChangeLog

二月 PostgreSQL 作业

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

PostgreSQL 相关新闻

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

本周 PostgreSQL 周报由 David Fetter 提供。

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

已应用补丁

Thomas Munro 推送

Tom Lane 提交

  • 对正则表达式调试代码进行一些小的改进。在定义 REG_DEBUG 时,确保未填充的“struct cnfa”全为零,而不仅仅是 nstates ==
  • 这主要是为了让在 gdb 中查看“struct subre”结构时,在正则表达式编译过程中不会被大量垃圾字段干扰。在打印调试输出的一些地方之后添加合适的 fflush 调用。顺便纠正一个错误的古老注释:parsebranch() 创建的连接 subre-s 具有 op == '.' 而不是 ','。在弄乱一些正则表达式性能改进时注意到。 https://git.postgresql.org/pg/commitdiff/2dd6733108f2bea07b0a3469e768bd900c0808b3

  • 简化 nodeIncrementalSort.c 中的循环逻辑。switchToPresortedPrefixMode() 中的内层循环可以实现为传统的整数计数器 for() 循环,移除几个冗余的布尔状态变量。旧逻辑是早期开发遗留下来的,但现在的情况是没有任何理由要增加额外的复杂性。此外,注释了 82e0e2930 添加的测试用例,以解释为什么它会命中该提交中修复的边界情况,并添加一个 EXPLAIN 来验证它正在创建一个增量排序计划。像之前的补丁一样,回溯到 v13。James Coleman 和 Tom Lane 讨论:https://postgr.es/m/16846-ae49f51ac379a4cb@postgresql.org https://git.postgresql.org/pg/commitdiff/0e5290312851557ee24e3d6103baf14d6066695c

  • 将 tsginidx.c 的 GIN 索引逻辑完全转换为三元运算。Commit 2f2007fbb 部分实现了这一点,但仍有两个问题。checkcondition_gin 通过设置出带重检标志来处理一些不确定的情况,有些是通过返回 TS_MAYBE,有些是通过两者都做。同时,TS_execute 任意地将 TS_MAYBE 结果转换为 TS_YES。因此,如果 checkcondition_gin 只选择返回 TS_MAYBE,结果将是 TS_YES 而没有重检标志,可能导致错误的查询输出。发生这种情况的情况是,传递给 gin_tsquery_[tri]consistent 的 indexscan 结果中存在 GIN_MAYBE 条目,据我所知,这只有在使用的大小足以导致位图丢失时才会发生。我最初的想法是确保在不确定的情况下总是设置重检标志并返回 TS_MAYBE。但这会走向另一个极端,可能强制重检那些可以证明匹配查询的行(因为即使 TS_execute 稍后发现答案必须是 TS_YES,重检标志仍然会设置)。相反,让我们完全摆脱出带重检标志,并依赖返回 TS_MAYBE。这需要导出 TS_execute 的一个版本,该版本实际上将返回评估的完整三元结果……但我们很可能一开始就应该这样做。不幸的是,似乎无法添加一个回归测试用例来覆盖这一点:导致 GIN 位图丢失所需的数据量比我们希望在测试中花费的时间要长。(我正在考虑是否允许更小的 work_mem 设置来缓解这个问题,但这将是另一个补丁。)根据 Dimitri Nüscheler 的 bug #16865。回溯到有错误提交的 v13。讨论:https://postgr.es/m/16865-4ffdc3e682e6d75b@postgresql.org https://git.postgresql.org/pg/commitdiff/38bb3aef354ca98ff88cb37337995039a3b5135f

  • 对正则表达式代码进行一些小的改进。推送一些预计不会有争议的部分,这些部分是从即将发布的补丁系列中提取出来的,以消除主补丁中不相关的混乱。在 compact() 中,在设置 REG_ASSERT 错误后立即返回;继续循环只会导致下面的断言失败。(问我怎么知道的。)在 parseqatom() 中,移除断言 moresubs() 完成了其工作。当 moresubs 确实完成其工作时,这与该函数最后的断言是冗余的;但当它因 OOM 而失败时,这是一个断言崩溃。我们可以通过在断言前添加 NOERR() 检查来避免崩溃,但减去代码似乎比添加代码更好。(请注意,在几行之外有一个 NOERR 退出,并且在此之间没有其他任何内容需要 moresubs 成功。所以我们实际上不需要额外的错误退出。)这是启用断言的构建中的一个实时错误,但鉴于 moresub 的微小分配中 OOM 的可能性非常低,我认为不值得回溯。另一方面,似乎有必要添加一个断言,即当我们准备好插入到 v->subs[subno] 时,目标仍然是 null,因为这之间存在递归。在 pg_regexec 中,确保在退出时冲洗任何调试输出,并尝试使 MDEBUG 消息更统一和有用。(特别是,确保所有消息都以 subre 的 id 号作为前缀,这样就可以匹配输入和输出报告。)在 test_regex 中添加一些测试用例,以提高前瞻和后顾约束的覆盖率。现在添加这些主要是为了确认这是现有的行为。讨论:https://postgr.es/m/1340281.1613018383@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/4e703d67193df0431c0740044d662d1feade73aa

  • 修复 BRE 模式正则表达式解析中的另一个古老错误。在研究正则表达式代码时,我偶然发现 commit afcc8772b2 修复的错误有一个同伴:next() 在基本 RE 模式下解析时,未能返回与“}”标记关联的特定值,用于“{m,n}”量词。同样,这可能导致量词被视为非贪婪,而它在基本模式下永远不应该是。要发生这种情况,在“}”之前的最后一个设置“nextvalue”的字符必须将其设置为零,或者它必须从一开始就偶然为零。例如,可以使用以数字“0”结尾的界限来重复此失败。与之前的补丁一样,全部回溯。 https://git.postgresql.org/pg/commitdiff/b5a66e7353ba65c11c5fc6a79b72213bde8dbe44

  • 在正则表达式引擎中引入“彩虹”弧。一些正则表达式构造,特别是“.”匹配任何字符的元字符,会产生一束并行 NFA 弧,覆盖所有可能的颜色(即字符等价类)。通过用带有特殊颜色代码“RAINBOW”的单个弧替换这些情况,我们可以显著改善处理大型正则表达式的空间和时间需求。这只需要对 pull() 和 push() 等地方进行少量额外的复杂化。pg_reg_getoutarcs() 的调用者现在必须为看到 RAINBOW 弧的可能性做好准备。对于唯一已知的用户 contrib/pg_trgm,这是一个净收益,因为它减少了需要处理的弧的数量,并且处理方式与其他包含太多字符无法单独处理的颜色没有区别。这是补丁系列的一部分,该系列总共将正则表达式引擎在大量真实世界正则表达式语料库上的运行时间减少了大约四倍。补丁作者:我,审阅者:Joel Jacobson 讨论:https://postgr.es/m/1340281.1613018383@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/08c0d6ad65f7c161add82ae906efb90dbd7f653d

  • 在正则表达式引擎中识别“匹配所有”NFA。这建立在之前的“彩虹”补丁之上,用于检测将匹配任何字符串的 NFA,尽管可能受到字符串长度的限制。选择此定义是为了匹配诸如 `.*`、`.+` 和 `.{1,100}` 等构造。在优化传递之后识别这样的 NFA 是相当便宜的,因为我们基本上只需要验证所有弧都是 RAINBOW 弧并将步骤数计数到结束状态。(嗯,关于字符串边界条件的伪颜色弧有一些复杂性,但不多。)一旦我们有了这些标记,正则表达式执行器函数 longest()、shortest() 和 matchuntil() 就无需花费每字符的工作来确定给定的子字符串是否满足这样的 NFA;它们只需要检查其长度是否在边界内。由于一些匹配问题需要 O(N) 次调用这些函数,我们将 N 字符字符串的运行时间从 O(N^2) 减少到 O(N)。当然,这对非匹配所有子模式没有帮助,但那些通常有约束条件,使我们能够避免需要 O(N) 子字符串检查。正是不受约束的“匹配所有”情况带来了最多的麻烦。这是补丁系列的一部分,该系列总共将正则表达式引擎在大量真实世界正则表达式语料库上的运行时间减少了大约四倍。补丁作者:我,审阅者:Joel Jacobson 讨论:https://postgr.es/m/1340281.1613018383@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/824bf71902db4a2067b8d64583c9d88bb264c44b

  • 修复正则表达式引擎以抑制无用的连接子 RE。parsebranch() 的注释声称它避免了在“subre”树中生成不必要的连接节点,但它遗漏了一些重要的情况。一旦我们确定某个原子是“混乱的”并且不能与当前正则表达式分支的先前原子捆绑在一起,parseqatom() 就会生成两个新的连接节点,一个用于将混乱的原子连接到分支中的后续原子,另一个上层节点用于将分支的先前部分连接到该原子。但这其中一个或两个可能是多余的,如果混乱的原子是分支中的第一个、最后一个或唯一一个。改进代码以抑制这种无用的连接节点,以及表示分支空块的无操作子节点。减少 subre 树节点数量不仅在执行时,而且在编译时都能带来显著的节省,因为每个 subre 节点都有自己的 NFA,必须单独优化。(也许有一天我们会找出如何在多个树节点之间共享优化工作,但这看起来并不容易。)消除上层树节点尤其有用,因为它们往往具有更大的 NFA。这是补丁系列的一部分,该系列总共将正则表达式引擎在大量真实世界正则表达式语料库上的运行时间减少了大约四倍。补丁作者:我,审阅者:Joel Jacobson 讨论:https://postgr.es/m/1340281.1613018383@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/cebc1d34e5207c37871708f91be65dd839760b5f

  • 将正则表达式引擎的 subre 树从二进制转换为 N-ary 样式。不是在 subre 结构中有左右子链接,而是有一个子链接加上一个同级链接。现在可以通过追踪同级链来访问树节点的多个子节点。这受益于选择性树节点。具有 N (>1) 分支的正则表达式现在由一个具有 N 个子节点的选择性节点表示,而不是包含 N 个选择性节点以及 N 个子节点的树。虽然旧的表示法在执行时并没有真正带来额外成本,但对于编译来说它相当糟糕,因为每个选择性节点都有自己的 NFA,我们很愚蠢地没有单独优化它。(更糟糕的是,所有这些 NFA 都描述了整个选择性模式,而不仅仅是树结构可能预期的部分。)我们继续要求连接节点有两个子节点。此数据结构现在已准备好支持更多功能,但执行器的逻辑需要仔细重新设计,并且不确定能获得多少好处。这是补丁系列的一部分,该系列总共将正则表达式引擎在大量真实世界正则表达式语料库上的运行时间减少了大约四倍。补丁作者:我,审阅者:Joel Jacobson 讨论:https://postgr.es/m/1340281.1613018383@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/581043089472816061a7fd381f40572191dfa48f

  • 避免为捕获括号生成额外的 subre 树节点。以前,每对捕获括号都会产生一个单独的 subre 树节点,其唯一功能是识别我们应该为这个特定的子表达式捕获匹配详细信息。在大多数情况下,我们并不真正需要它,因为我们可以完美地在执行实际匹配工作的子节点上添加“捕获此”注解。与前两个提交一样,这主要的好处是避免为实际没有发挥作用的树节点生成和优化 NFA。选择的数据表示每个 subre 节点只允许一个捕获注解。在合法的(但似乎不太有用)情况下,当有多个捕获括号环绕正则表达式的同一位(即“((xyz))”)时,将子节点包装在 N-1 个捕获节点中,其行为与以前相同。我们可以做得更努力,但我会克制,等待一些证据表明这些情况值得关注。顺便说一句,改进 regex.h 中的注释,说明所有不同的 re_info 位意味着什么。有些非常明显,但有些则不那么明显,所以反向工程一些文档。这是补丁系列的一部分,该系列总共将正则表达式引擎在大量真实世界正则表达式语料库上的运行时间减少了大约四倍。补丁作者:我,审阅者:Joel Jacobson 讨论:https://postgr.es/m/1340281.1613018383@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/ea1268f6301cc7adce571cc9c5ebe8d9342a2ef4

Michaël Paquier 提交

Amit Kapila 提交

Peter Geoghegan 提交

  • 调整 lazy_scan_heap() 的会计注释。解释 tups_vacuumed 变量会计了哪些特定的 LP_DEAD 行指针。 https://git.postgresql.org/pg/commitdiff/7cde6b13a9b630e2f04d91e2f17dedc2afee21c6

  • 避免 pageinspect 中误解释 GiST 页面。GistPageSetDeleted() 在删除页面时设置 pd_lower,并将页面内容设置为 GISTDeletedPageContents。避免在 pageinspect 中将已删除的 GiST 页面视为常规的带槽页面。commit 756ab291 中的疏忽。作者:Andrey Borodin x4mmm@yandex-team.ru https://git.postgresql.org/pg/commitdiff/fa41cf8f183ac5d702e91da567e9b3375c632081

  • 为 GiST pageinspect 函数添加“LP_DEAD item?”列。这使 gist_page_items() 和 gist_page_items_bytea() 与 nbtree 的 bt_page_items() 函数保持一致。commit 756ab291 的一个小的后续更新,该提交添加了 GiST 函数。作者:Andrey Borodin x4mmm@yandex-team.ru 讨论:https://postgr.es/m/E0794687-7315-4C29-A9C7-EC54D448596D@yandex-team.ru https://git.postgresql.org/pg/commitdiff/9e596b65f430fcb942685b41860b323398a88873

  • nbtree README:移动 VACUUM 线性扫描部分。在讨论了 VACUUM 的元组删除之后,但在讨论了 VACUUM 的页面删除之前,讨论 VACUUM 的线性扫描。这种进展更加自然。还稍微调整了措辞。似乎没有必要讨论它在 PostgreSQL 8.2 之前的运作方式。 https://git.postgresql.org/pg/commitdiff/128dd901a5c87e11c6a8cbe227a806cdc3afd10d

  • 为 nbtree README 添加关于页面回收的部分。通过添加一个新部分来合并关于 VACUUM 如何将页面放入 FSM 以供回收的讨论,该部分在讨论页面删除之后。这种结构反映了 Lanin & Shasha 的论文明确地将页面回收与页面删除分开了。nbtree 中的页面回收是论文中称为“drain technique”的实现。这种分离对于 nbtree VACUUM 是一个重要概念。搜索者必须检测并从并发页面删除中恢复,但他们永远不必考虑并发页面回收。回收几乎总可以被视为一种低级垃圾回收操作,它异步地释放逻辑树节点所支持的物理空间。几乎所有代码只需要关注逻辑树节点。(请注意,“逻辑树节点”目前在 nbtree 代码中不是一个术语——所有这些都是隐式工作的。)这是为即将发布的补丁做准备,该补丁将教会 nbtree VACUUM 在运行时记住它在本地内存中删除的页面的详细信息。这使得同一个 VACUUM 操作在稍后(当它到达 btvacuumscan() 的末尾时)可以将自己删除的页面放入 FSM。 https://git.postgresql.org/pg/commitdiff/b071a311495bbf42ddf2466a556d033df8f0f5e7

Fujii Masao 提交

  • 在 pg_locks 中显示进程开始等待锁的时间,第二版。此提交向 pg_locks 视图添加了一个新列“waitstart”。此列报告服务器进程开始等待锁的时间(如果未持有锁)。此信息很有用,例如,在检查等待锁的时间长度时,可以通过从 pg_locks 中的“waitstart”减去当前时间来做到这一点,并识别进程正在等待的锁非常长。此功能使用为死锁超时计时器获得的当前时间作为“waitstart”(即,进程开始等待锁的时间)。由于新获取当前时间可能会导致开销,我们重用已获取的时间以避免该开销。请注意,“waitstart”的更新是在不持有锁表分区锁的情况下进行的,以避免额外的锁获取开销。这可能导致“waitstart”在 pg_locks 中在等待开始后很短一段时间内为 NULL,即使“granted”为 false。这在实践中是没问题的,因为我们可以假设用户很可能在等待锁很长时间时查看“waitstart”。此补丁的第一次尝试(commit 3b733fcd04)导致 buildfarm 成员“rorqual”(使用 --disable-atomics --disable-spinlocks 构建)报告回归测试失败。它被 commit 890d2182a2 撤销。失败的原因是为 prepare transaction 末尾创建的虚拟进程条目中的“waitstart”原子变量未初始化。第二次尝试修复了该问题。增加目录版本。作者:Atsushi Torikoshi 审阅者:Ian Lawrence Barwick, Robert Haas, Justin Pryzby, Fujii Masao 讨论:https://postgr.es/m/a96013dc51cdc56b2a2b84fa8a16a993@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/46d6e5f567906389c31c4fb3a2653da1885c18ee

  • 修复 pg_stat_wal_receiver 中的“invalid spinlock number: 0”错误。Commit 2c8dd05d6c 将原子变量 writtenUpto 添加到 walreceiver 的共享内存信息中。它仅在 walreceiver 启动时初始化,但可以随时通过 pg_stat_wal_receiver 视图读取,即在它初始化之前。在用 --disable-atomics 和 --disable-spinlocks 构建的服务器中,读取此未初始化的原子变量可能导致“invalid spinlock number: 0”错误。此提交更改了 writtenUpto,使其在 postmaster 启动时初始化,以避免通过 pg_stat_wal_receiver 读取未初始化的变量并修复错误。此外,此提交将 writtenUpto 的读取移到了保护 walreceiver 共享变量的自旋锁释放之后。这是必要的,以防止在持有另一个自旋锁时,通过原子变量读取获取新的自旋锁,并缩短自旋锁的持续时间。此更改导致 writtenUpto 与受自旋锁保护的其他 walreceiver 共享变量不一致。但这是可以的,因为 writtenUpto 不应用于数据完整性检查。回溯到引入该错误的 v13 版本。作者:Fujii Masao 审阅者:Michael Paquier, Thomas Munro, Andres Freund 讨论:https://postgr.es/m/7ef8708c-5b6b-edd3-2cf2-7783f1c7c175@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/614b7f18b3bda738f352a8732cf749eb5fa56dae

  • 修复 COMMIT AND CHAIN 命令中的错误。此提交修复了 COMMIT AND CHAIN 命令,使其即使在事务提交时定义了保存点,也能立即启动新事务。以前 COMMIT AND CHAIN 命令在这种情况下不会这样做,因为 commit 280a408b48 忘记让 CommitTransactionCommand() 在事务状态为 TBLOCK_SUBCOMMIT 时处理事务链。此提交还添加了 COMMIT AND CHAIN 命令在定义了保存点时的回归测试。回溯到添加事务链的 v12 版本。报告人:Arthur Nascimento 作者:Fujii Masao 审阅者:Arthur Nascimento, Vik Fearing 讨论:https://postgr.es/m/16867-3475744069228158@postgresql.org https://git.postgresql.org/pg/commitdiff/8a55cb5ba9655ffb1cf0a3042aaa6f5eef8c5a85

  • 修复 psql 的 ON_ERROR_ROLLBACK 以处理 COMMIT AND CHAIN。当启用 ON_ERROR_ROLLBACK 时,psql 在执行查询后,如果它处于有效的事务块中且空闲,则会释放临时保存点。但 psql 在执行 RELEASE 或 ROLLBACK 后不会这样做,因为临时保存点在此情况下已被销毁。此提交更改了 psql 的 ON_ERROR_ROLLBACK,使其在执行 COMMIT AND CHAIN 时也不释放临时保存点。在这种情况下不需要释放临时保存点,因为 COMMIT AND CHAIN 也会销毁事务提交中定义的所有保存点。否则 psql 会尝试释放 COMMIT AND CHAIN 已销毁的保存点并导致错误“ERROR: savepoint "pg_psql_temporary_savepoint" does not exist”。回溯到添加事务链的 v12 版本。报告人:Arthur Nascimento 作者:Arthur Nascimento 审阅者:Fujii Masao, Vik Fearing 讨论:https://postgr.es/m/16867-3475744069228158@postgresql.org https://git.postgresql.org/pg/commitdiff/fe06819f105ccea52c12d418c8dbaaaa54377e96

Heikki Linnakangas 提交

  • 使 ExecGetInsertedCols() 及其类似函数更加健壮并改进注释。如果 ExecGetInsertedCols()、ExecGetUpdatedCols() 或 ExecGetExtraUpdatedCols() 调用时传入的 ResultRelInfo 不在范围表中且不是分区路由目标,这些函数将解引用 NULL 指针 relinfo->ri_RootResultRelInfo。当在未直接修改的表上触发 RI 触发器时,会创建此类 ResultRelInfos。这些函数当前的所有调用者都没有传入此类关系,因此这不是一个实时错误,但让我们使其更加健壮。还更新了 ResultRelInfo 中的注释;在 commit 6214e2b228 之后,对于为分区元组路由创建的 ResultRelInfos,ri_RangeTableIndex 为零。由 Coverity 发现。回溯到 v11,与 commit 6214e2b228 一样。审阅者:Tom Lane, Amit Langote https://git.postgresql.org/pg/commitdiff/54e51dcde03e5c746e8de6243c69fafdc8d0ec7a

Andres Freund 提交

Peter Eisentraut 提交

Magnus Hagander 已推送

Tomáš Vondra 提交了

待处理补丁

Justin Pryzby 发送了一个补丁,用于移除 REINDEX (CONCURRENTLY, TABLESPACE ..) 实现中的一些死代码。

Ikeda Masahiro 发送了另一个补丁修订版,用于添加与写入/同步 WAL 记录相关的统计信息,并使 WAL 接收器报告 WAL 统计信息。

Michaël Paquier 发送了另一个补丁修订版,用于重构 HMAC 实现。

Daniel Gustafsson 发送了另一个补丁修订版,用于在运行的集群中支持校验和的启用/禁用。

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

Peter Eisentraut 发送了另一个补丁修订版,用于通过增强错误消息“every hash partition modulus must be a factor of the next larger modulus”并提供显示具体数字的详细消息,来改进新的哈希分区边界检查错误消息。

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

Justin Pryzby 发送了另一个补丁修订版,用于允许在分区表上执行 CREATE INDEX CONCURRENTLY。

Takayuki Tsunakawa 发送了另外两个补丁修订版,用于提高 COPY FROM 到具有远程分区的表的性能,部分是通过向 FDW API 添加和使用 COPY 例程。

Peter Eisentraut 发送了一个补丁,用于为来自客户端的 SSL 连接设置 SNI。

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

Bharath Rupireddy 发送了另外两个补丁修订版,用于实现 ALTER SUBSCRIPTION ... DROP PUBLICATION。

Peter Smith 发送了三个补丁修订版,用于实现两阶段事务的逻辑解码。

Peter Geoghegan 发送了两个补丁修订版,用于为 nbtree 页面删除使用完整的 64 位 XID,回收同一 VACUUM 期间删除的页面,并在 VACUUM VERBOSE 输出中显示“新删除的页面”。

Amit Langote 发送了两个补丁修订版,用于确保在分区表上创建外键触发器,并在跨分区更新期间正确强制执行外键约束。

Greg Nancarrow 和 Amit Langote 交换了补丁,使 INSERT ... SELECT ... 能够并行执行。

Seamus Abshere 和 Amit Langote 交换了补丁,允许在分区表上设置 parallel_workers。

Michaël Paquier 发送了一个补丁,用于为没有存储的关系添加 no_storage、fallback 表 AM。

Tomáš Vondra 和 Matthias van de Meent 交换了补丁,以扩展 COPY 进度报告。

Amit Langote 发送了另一个补丁修订版,用于提高继承树上的更新和删除的扩展性。

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

Pavel Stěhule 发送了另一个补丁修订版,用于使 pg_dump 可以从文件中读取选项。

Paul Martinez 发送了一个补丁,用于记录 max_replication_slots 在订阅方的影响。

Amit Langote 发送了三个补丁修订版,用于修复元组路由,使其仅为插入初始化批处理。

Andy Fan 发送了两个补丁修订版,引入 RelOptInfo 中的 notnullattrs 字段,以指示当前查询中哪些属性不是 NULL。

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

David Rowley 发送了两个补丁修订版,增加了 TID Range Scans 以支持高效扫描 TID 范围。

Kyotaro HORIGUCHI 发送了两个补丁修订版,旨在修复 ALTER TABLE 的某些调用中出现的错误,通过纠正实际允许的关系类型集来修复。

Justin Pryzby 和 Michaël Paquier 交换了补丁,用于实现分区表上 CREATE INDEX 的进度报告。

Amit Kapila 发送了三个补丁修订版,用于在身份验证失败时区分物理和逻辑复制连接。

John Naylor 发送了四个补丁修订版,用于使用 SIMD 指令验证 UTF-8。

Vik Fearing 发送了三个补丁修订版,用于实现 SQL 标准 TRIM_ARRAY,它从数组中删除最后一个元素。

David Rowley 和 Andy Fan 交换了补丁,允许 estimate_num_groups() 返回更多关于估计的细节,允许 simplehash.h 的用户执行直接删除,添加了一个 Result Cache 执行节点,并移除 nodeResultCache.c 中的一些代码重复。

Justin Pryzby 和 Dilip Kumar 交换了补丁,用于添加自定义表压缩方法。

Takashi Menjo 发送了另一个补丁修订版,用于使 WAL 操作可以使用持久内存。

Mark Dilger 发送了另一个补丁修订版,用于添加一个 heapcheck contrib 扩展。

Thomas Munro 发送了两个补丁修订版,用于修复 pg_collation_actual_version() ERROR: cache lookup failed for collation 123 的错误,通过修复处理 collation provider 的方式来修复。

Kyotaro HORIGUCHI 发送了另一个补丁修订版,用于除了 CRL 文件之外,还可以指定 CRL 目录。

Daniel Gustafsson 发送了另一个补丁修订版,用于使 NSS 可以作为 libpq 的 TLS 后端。

Álvaro Herrera 发送了另一个补丁修订版,用于在 libpq 中实现批处理/流水线支持。

Bharath Rupireddy 发送了另一个补丁修订版,用于为多插入和单插入添加表 AM,然后用于 CTAS、REFRESH MATERIALIZED VIEW 和 COPY。

Tomáš Vondra 发送了另一个补丁修订版,用于实现表达式的扩展统计信息。

Hou Zhijie 发送了另一个补丁修订版,添加了一个新的 GUC enable_parallel_dml(布尔值,默认为 false),以及一个新的表选项 parallel_dml_enabled(布尔值,默认为 true)。每个都按其名称含义工作。

Thomas Munro 发送了一个补丁,用于添加 sort_template.h 以创建快速排序函数。

Amit Langote 发送了一个补丁,用于允许在跨分区更新期间批处理插入。

Daniel Gustafsson 发送了一个补丁,禁止 SSL 压缩,理由是它使加密分析攻击更容易被利用。

Peter Eisentraut 发送了另一个补丁修订版,通过添加 LSN_FORMAT_ARGS 宏用于 printf 样式的 LSN 打印,来简化 LSN 的打印。

Konstantin Knizhnik 发送了另一个补丁修订版,用于修复存储过程和 TOAST 数据访问之间的不兼容问题。

Jan Wieck 发送了一个补丁,用于添加一个线协议钩子和一个示例实现 telnet。

Guillaume Lelarge 发送了另一个补丁修订版,向 pg_dump 添加了一个 --extension (-e) 选项,该选项指定要转储的扩展。该选项可以使用 0 次或多次。

Nathan Bossart 发送了另一个补丁修订版,用于避免过早创建 archive status ".ready" 文件,并在崩溃后跟踪已通知可存档的位置。

Nathan Bossart 发送了另一个补丁修订版,用于澄清 RESET ROLE 在“role”按用户、按数据库设置或通过命令行选项设置时的行为文档,并为“role”和“session_authorization”添加配置参数条目。

Paul Guo 发送了另一个补丁修订版,用于通过仅 fsync() 受影响的文件/目录,并使用 copy_file_range() 进行文件复制来加速 pg_rewind。

Michaël Paquier 发送了另一个补丁修订版,用于实现 OpenSSL <= 1.0.2 的缺失锁定函数。

Iwata Aya 发送了另一个补丁修订版,用于为 libpq 添加跟踪。

Andres Freund 发送了另一个补丁修订版,用于使用全局屏障实现 wal prohibit 状态,在 WAL 写入前进行 Error 或 Assert START_CRIT_SECTION,并通过 README 文档化这些对 transam 和 page 的影响。

Georgios Kokolatos 发送了另一个补丁修订版,用于使 dbsize 更加一致。

Denis Smirnov 发送了两个补丁修订版,通过允许可变大小的块,使 analyze AM 更灵活。

Paul Guo 发送了两个补丁修订版,用于在 CTAS 期间冻结元组,这可以避免不必要的 vacuums。

Andy Fan 发送了两个补丁修订版,使一些静态函数 extern 并扩展 ChangeVarNodes,使其能够更改 var->attno,并构建一些隐含的剪枝条件以扩展规划时间分区剪枝和初始化分区剪枝的用例。

Marcus Wanner 发送了两个补丁修订版,用于向输出插件提供空的 prepares。

Ajin Cherian 和 Marcus Wanner 交换了补丁,以在逻辑解码中保留 PREPAREs 与 COMMITs 的顺序。

Andrew Dunstan 发送了另一个补丁修订版,通过让 make 文件和 msvc 构建系统创建一个具有要搜索日志文件位置的已知文件(如果发生错误),来帮助跟踪 cfbot 故障。

Andy Fan 发送了一个补丁,在 RelOptInfo 中引入 notnullattrs 字段以指示当前查询中哪些属性不是 NULL,并为单个 rel 添加了仅限单 rel 的 UniqueKey with EquivalenceClass。

Thomas Munro 发送了一个补丁,根据 Andrew Gierth 的要求,移除 effective_io_concurrency 描述中过时的关于 spindle 的引用。

Bharath Rupireddy 发送了一个补丁,用于一次更新多个进度参数。

Vik Fearing 发送了两个补丁修订版,以根据标准实现 GROUP BY DISTINCT。

Vik Fearing 发送了一个补丁,向 pg_config 添加了 catalog version 以及一个新的 catalog_version guc,可以从 SQL 访问。