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

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

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

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

已应用补丁

Thomas Munro 推送了

Tom Lane 推送了

  • 对正则表达式调试代码进行少量修复。当定义了 REG_DEBUG 时,请确保未填充的“struct cnfa”是全零,而不仅仅是它具有 nstates ==
  • 这主要是为了在正则表达式编译期间,查看 gdb 中的“struct subre”结构不会因大量垃圾字段而分散注意力。调整一些打印调试输出的位置,以便之后调用合适的 fflush。顺便说一句,更正一个错误的古老注释:parsebranch() 创建的连接子正则表达式的 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 索引逻辑转换为完全三元操作。提交 2f2007fbb 部分完成了此操作,但仍有两个剩余的缺陷。checkcondition_gin 通过设置带外重新检查标志来处理一些不确定的情况,一些通过返回 TS_MAYBE,还有一些通过同时执行这两项操作。同时,TS_execute 任意地将 TS_MAYBE 结果转换为 TS_YES。因此,如果 checkcondition_gin 选择仅返回 TS_MAYBE,则结果将是 TS_YES,没有重新检查标志,这可能会导致错误的查询输出。如果传递给 gin_tsquery_[tri]consistent 的索引扫描结果中有 GIN_MAYBE 条目,则可能会发生这种情况,据我所知,只有当用于累积索引扫描结果的 tidbitmap 变得足够大而导致有损时才会发生这种情况。我最初的想法是通过确保我们在不确定的情况下始终设置重新检查标志以及返回 TS_MAYBE 来解决此问题。但这会朝另一个方向错误,可能会强制重新检查可以证明与查询匹配的行(因为即使 TS_execute 稍后发现答案必须是 TS_YES,重新检查标志仍然会设置)。相反,让我们完全删除带外重新检查标志,并依靠返回 TS_MAYBE。这需要导出一个 TS_execute 版本,它实际上会返回评估的完整三元结果... 但我们可能应该从一开始就这样做。不幸的是,添加涵盖此内容的回归测试用例似乎不切实际:导致 GIN 位图变得有损所需的数据量会导致运行时间比我们认为希望在测试中花费的时间长。(我正在考虑允许较小的 work_mem 设置来改善这种情况,但这将是另一个补丁的问题。)根据来自 Dimitri Nüscheler 的错误 #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] 目标仍然为空,因为两者之间存在递归。在 pg_regexec 中,确保我们在退出时刷新所有调试输出,并尝试使 MDEBUG 消息更加统一和有用。(特别是,确保所有消息都以子正则表达式的 ID 号为前缀,这样就可以匹配入口和退出报告。)在 test_regex 中添加一些测试用例以提高前瞻和后顾约束的覆盖率。现在添加这些主要是为了确定这确实是现有的行为。讨论:https://postgr.es/m/1340281.1613018383@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/4e703d67193df0431c0740044d662d1feade73aa

  • 修复基本 RE 模式正则表达式解析中的另一个古老错误。在研究正则表达式代码时,我碰巧注意到在提交 afcc8772e 中修复的错误有一个同级:在基本 RE 模式下解析时,next() 未返回与“{m,n}”量词的“}”标记关联的特定值。同样,这可能会导致将量词视为非贪婪,这在基本模式下永远不应该发生。要发生这种情况,“}”之前的最后一个设置“nextvalue”的字符必须将其设置为零,或者它必须从一开始就意外地为零。例如,以数字“0”结尾的边界可以重复触发失败。与之前的补丁一样,一直反向移植。https://git.postgresql.org/pg/commitdiff/b5a66e7353ba65c11c5fc6a79b72213bde8dbe44

  • 在正则表达式引擎中引入“彩虹”弧。一些正则表达式构造,尤其是“.”匹配任意字符的元字符,会产生一束平行的 NFA 弧,覆盖所有可能的颜色(即字符等价类)。通过将这些情况替换为带有特殊颜色代码“彩虹”的单个弧,我们可以显著提高处理大型正则表达式所需的空间和时间。这只需要在 pull() 和 push() 等位置进行少量额外的复杂化处理。pg_reg_getoutarcs() 的调用者现在必须准备好看到一个彩虹弧。对于唯一已知的用户 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 相当廉价,因为我们基本上只需要验证所有弧都是彩虹弧,并计算到结束状态的步数。(好吧,对于字符串边界条件的伪颜色弧,有一些复杂性,但不多。)一旦我们有了这些标记,正则表达式执行器函数 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

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

  • 将正则表达式引擎的子正则表达式树从二叉样式转换为 N 元样式。子正则表达式结构中不再有左右子链接,而是只有一个子链接加上一个兄弟链接。现在通过追踪兄弟链到达树节点的多个子节点。此功能的受益者是交替树节点。具有 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

  • 避免为捕获括号生成额外的子正则表达式树节点。以前,每对捕获括号都会产生一个单独的子正则表达式树节点,其唯一功能是识别我们应该捕获此特定子表达式的匹配详细信息。在大多数情况下,我们并不真的需要这样做,因为我们可以很好地在执行实际匹配工作的子节点上放置一个“捕获此项”注释。与前面两次提交一样,此操作的主要价值在于避免为实际上没有发挥作用的树节点生成和优化 NFA。选择的数据表示形式每个子正则表达式节点只允许一个捕获注释。在符合规范但看起来不是很常见的、在正则表达式的同一位周围有多个捕获括号的情况(例如“((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 页面视为常规的槽页面。这是提交 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() 函数保持一致。这是对添加了 GiST 函数的提交 756ab291 的一个小小的后续改进。作者: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 中的页面回收是该论文中所谓的“排水技术”的实现。这种解耦对于 nbtree VACUUM 来说是一个重要概念。搜索器必须检测并从并发页面删除中恢复,但它们永远不必考虑并发页面回收。回收几乎总是可以被认为是一种低级的垃圾回收操作,它异步释放支持逻辑树节点的物理空间。几乎所有代码只需要关心逻辑树节点。(请注意,“逻辑树节点”目前在 nbtree 代码中不是一个术语——所有这些都是隐式工作的。)这是为即将到来的一个补丁做准备,该补丁将教会 nbtree VACUUM 记住它在运行时删除的页面的详细信息,这些信息保存在本地内存中。这使得同一个 VACUUM 操作可以在稍后到达 btvacuumscan() 的末尾时,考虑将其自身删除的页面放置在 FSM 中。https://git.postgresql.org/pg/commitdiff/b071a311495bbf42ddf2466a556d033df8f0f5e7

藤井正雄推送

  • 在 pg_locks 中显示进程开始等待锁的时间,版本 2。此提交向 pg_locks 视图添加了新列 "waitstart"。如果锁未被持有,则此列报告服务器进程开始等待锁的时间。例如,通过从当前时间减去 pg_locks 中的 "waitstart" 来检查等待锁的时间长度,并识别进程等待时间很长的锁,此信息非常有用。此功能使用为死锁超时计时器获取的当前时间作为 "waitstart"(即,此进程开始等待锁的时间)。由于新获取当前时间可能会导致开销,我们重用已经获取的时间以避免该开销。请注意,在不持有锁表的 partition 锁的情况下更新 "waitstart",以避免因额外的锁获取而产生的开销。这可能会导致在等待开始后的一小段时间内,即使 "granted" 为 false,pg_locks 中的 "waitstart" 也变为 NULL。这在实践中是可以接受的,因为我们可以假设用户可能会在等待锁很长时间时查看 "waitstart"。此补丁的第一次尝试(提交 3b733fcd04)导致 buildfarm 成员 "rorqual"(使用 --disable-atomics --disable-spinlocks 构建)报告回归测试失败。它被提交 890d2182a2 回滚。此失败的原因是,在准备事务结束时创建的虚拟进程条目中,"waitstart" 的原子变量未初始化。第二次尝试修复了这个问题。版本目录更新。作者:鸟越 淳 审核者:Ian Lawrence Barwick、Robert Haas、Justin Pryzby、藤井正雄 讨论:https://postgr.es/m/a96013dc51cdc56b2a2b84fa8a16a993@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/46d6e5f567906389c31c4fb3a2653da1885c18ee

  • 修复 pg_stat_wal_receiver 中的 "invalid spinlock number: 0" 错误。提交 2c8dd05d6c 将 atomic 变量 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 不应用于数据完整性检查。回溯修复到提交 2c8dd05d6c 引入此 bug 的 v13。作者:藤井正雄 审核者: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 命令中的 bug。此提交修复了 COMMIT AND CHAIN 命令,使其即使在要提交的事务中定义了保存点,也立即启动新事务。之前,COMMIT AND CHAIN 命令在这种情况下不会这样做,因为提交 280a408b48 忘记了在事务状态为 TBLOCK_SUBCOMMIT 时使 CommitTransactionCommand() 处理事务链接。此外,此提交还添加了在定义保存点时针对 COMMIT AND CHAIN 命令的回归测试。回溯修复到添加事务链接的 v12。报告者:Arthur Nascimento 作者:藤井正雄 审核者: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 审核者:藤井正雄、Vik Fearing 讨论:https://postgr.es/m/16867-3475744069228158@postgresql.org https://git.postgresql.org/pg/commitdiff/fe06819f105ccea52c12d418c8dbaaaa54377e96

Heikki Linnakangas 推送

  • 使 ExecGetInsertedCols() 及其友元函数更加健壮并改进注释。如果使用不在范围表中的 ResultRelInfo 且不是分区路由目标的 ResultRelInfo 调用 ExecGetInsertedCols()、ExecGetUpdatedCols() 或 ExecGetExtraUpdatedCols(),则这些函数将取消引用 NULL 指针 relinfo->ri_RootResultRelInfo。当在未直接修改的表中触发 RI 触发器时,会创建这样的 ResultRelInfo。这些函数的当前调用者都没有传递这样的关系,因此这不是一个实际存在的 bug,但让我们使它们更健壮。此外,更新 ResultRelInfo 中的注释;在提交 6214e2b228 之后,为分区元组路由创建的 ResultRelInfo 的 ri_RangeTableIndex 为零。Coverity 注意到。像提交 6214e2b228 一样,回溯到 v11。审核者:Tom Lane、Amit Langote https://git.postgresql.org/pg/commitdiff/54e51dcde03e5c746e8de6243c69fafdc8d0ec7a

Andres Freund 推送

Peter Eisentraut 推送了

Magnus Hagander 推送了

Tomáš Vondra 推送了

待处理的补丁

Justin Pryzby 提交了一个补丁,以删除 REINDEX (CONCURRENTLY, TABLESPACE ..) 实现中的一些死代码。

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

Michaël Paquier 提交了另一个补丁修订版,以重构 HMAC 实现。

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

Tomáš Vondra 提交了另一个补丁修订版,以实现 BRIN 多范围索引。

Peter Eisentraut 提交了另一个补丁修订版,通过增强错误消息“每个哈希分区模数必须是下一个较大模数的因子”并显示所涉及的特定数字的详细消息,来改进新的哈希分区边界检查错误消息。

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 提交了另外两个补丁修订版,以使用完整的 64 位 XID 进行 nbtree 页面删除,回收在同一 VACUUM 期间删除的页面,并在 VACUUM VERBOSE 输出中显示“新删除的页面”。

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

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

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

Michaël Paquier 提交了一个补丁,用于为没有存储的关系添加 no_storage、回退表 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 范围扫描,以支持对 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 的用户执行直接删除,添加结果缓存执行程序节点,并删除 nodeResultCache.c 中的一些代码重复。

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

Takashi Menjo 提交了另一个补丁修订版,以使可以使用持久内存进行 WAL 操作。

Mark Dilger 提交了另一个补丁修订版,以添加 heapcheck contrib 扩展。

Thomas Munro 提交了另外两个补丁修订版,通过修复排序规则提供程序的处理方式,来修复表现为 pg_collation_actual_version() ERROR 的错误:排序规则 123 的缓存查找失败。

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 (boolean default false) 和新的表选项 parallel_dml_enabled (boolean default true)。每个都按它们所说的执行。

Thomas Munro 提交了一个补丁,用于添加 sort_template.h 以制作快速排序函数。

Amit Langote 提交了一个补丁,以允许在跨分区更新期间进行插入批处理。

Daniel Gustafsson 提交了一个补丁,以禁止使用 SSL 压缩,理由是它使密码分析攻击更容易发起。

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

Konstantin Knizhnik 提交了另一个补丁修订版,以修复存储过程和对 TOAST 数据的访问之间的不协调问题。

Jan Wieck 提交了一个补丁,用于添加有线协议挂钩和示例实现 telnet。

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

Nathan Bossart 提交了另一个补丁修订版,以避免过早创建存档状态“.ready”文件,并通过崩溃跟踪已通知的准备好存档位置。

Nathan Bossart 发送了补丁的另一个修订版本,以阐明当“role”设置为每个用户、每个数据库或通过命令行选项设置时的 RESET 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 禁止状态,在 WAL 写入的 START_CRIT_SECTION 之前进行错误或断言,并通过 README 文档记录这些对 transam 和页面的影响。

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

Denis Smirnov 发送了补丁的另外两个修订版本,通过允许可变大小的块来使分析 AM 更加灵活。

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

Andy Fan 发送了补丁的另外两个修订版本,将一些静态函数设为 extern,并扩展 ChangeVarNodes,使其可以更改 var->attno,并构建一些隐含的修剪限定词,以扩展计划时分区修剪和初始化分区修剪的用例。

Marcus Wanner 发送了补丁的两个修订版本,以将空准备(prepares)呈现给输出插件。

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

Andrew Dunstan 发送了补丁的另一个修订版本,通过让 make 文件和 msvc 构建系统创建一个众所周知的文件,其中包含如果发生错误要搜索的日志文件位置,来帮助跟踪 cfbot 失败。

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

Thomas Munro 根据 Andrew Gierth 的建议发送了一个补丁,以删除 effective_io_concurrency 描述中对 spindles 的过时引用。

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

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

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