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

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

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

Crunchy PostgreSQL Operator 4.6.0 发布,这是一个用于在 Kubernetes 上部署和管理开源 PostgreSQL 集群的系统。https://access.crunchydata.com/documentation/postgres-operator/latest/releases/4.6.0/

pgAdmin4 4.30 发布,这是一个用于 PostgreSQL 的 Web 和原生 GUI 控制中心。https://www.pgadmin.org/docs/pgadmin4/dev/release_notes_4_30.html

PostgreSQL 产品新闻

一月份的 PostgreSQL 工作

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

PostgreSQL 新闻

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

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

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

已应用的补丁

Tom Lane 推送了

  • 将时区数据文件更新到 tzdata 2021a 版本。俄罗斯(伏尔加格勒时区)和南苏丹的夏令时法律变更。澳大利亚、巴哈马、伯利兹、百慕大、加纳、以色列、肯尼亚、尼日利亚、巴勒斯坦、塞舌尔和瓦努阿图的历史修正。值得注意的是,Australia/Currie 时区已修正到与 Australia/Hobart 完全相同的程度。https://git.postgresql.org/pg/commitdiff/c7edf4ac246b67073563354c2808c78868cbac36

  • 使 storage/standby.h 再次可以独立编译。自提交 0650ff230 以来,此文件由于引用了 typedef TimestampTz 而未包含相应的头文件,因此未通过 headerscheck/cpluspluscheck 验证。https://git.postgresql.org/pg/commitdiff/a4b03de589c1df0845e9732da203f505f2eedb6d

  • 文档:改进 pg_proc.protrftypes 的文档。添加指向 pg_type 的“references”链接,就像我们为其他类型 OID 数组所做的那样。稍微润色一下解释。Joel Jacobson,由我进行额外编辑。讨论:https://postgr.es/m/d1cc628c-3953-4209-957b-29427acc38c8@www.fastmail.com https://git.postgresql.org/pg/commitdiff/951862eda57e5dc8f78c97b3c30fe2032a5562b8

  • 修复函数 TRANSFORM 子句的规则实用程序支持中断的问题。我偶然发现由于错误的断言导致其转储核心。更糟糕的是,自 v11 以来,输出格式一直错误。显然,我们需要在这里进行一些回归测试。讨论:https://postgr.es/m/d1cc628c-3953-4209-957b-29427acc38c8@www.fastmail.com https://git.postgresql.org/pg/commitdiff/07d46fceb4254b00e79f3d06419cbae13b0ecb5a

  • 不要在 Kerberos 测试中破坏调用用户的凭据缓存。此测试脚本中令人尴尬的疏忽,幸运的是默认情况下不运行。Jacob Champion 的报告和补丁。讨论:https://postgr.es/m/1fcb175bafef6560f47a8c31229fa7c938486b8d.camel@vmware.com https://git.postgresql.org/pg/commitdiff/881933f194221abcce07fb134ebe8685e5bb58dd

  • 提高 plpgsql 过程中重复 CALL 的性能。此补丁本质上是清理 plpgsql 过程的原始实现遗留的技术债务,特别是提交 d92bc83c4。如果我们在非原子上下文中,该补丁(或更准确地说,修复其最严重错误的后续补丁)迫使我们每次都重新规划 CALL 和 DO 语句。这不是出于任何根本原因,而仅仅是因为使用保存的计划需要有一个 ResourceOwner 来保存该计划的引用计数,而我们手头没有合适的资源所有者,如果这样做,可用的 API 也不支持使用。虽然为 CALL/DO 创建“计划”的成本不高,但周期在重复执行中会累积。因此,此补丁进行了以下 API 更改:* 修改 GetCachedPlan/ReleaseCachedPlan 以允许调用者指定使用哪个资源所有者来固定计划,而不是强制使用 CurrentResourceOwner。* spi.c 获得了一个“SPI_execute_plan_extended”入口点,允许调用者说出使用哪个资源所有者来固定计划。这借鉴了最近添加的 SPI_prepare_extended 中的选项结构的想法,希望允许在未来添加更多选项而无需进一步破坏 API。这取代了 SPI_execute_plan_with_paramlist(我已将其标记为已弃用)以及 SPI_execute_plan_with_receiver(这是 v14 中的新功能,因此我将其完全删除)。* 我还借此机会删除了让 plpgsql 访问 SPI 私有数据结构以将 SPI 计划标记为“no_snapshot”的粗糙 hack。最好将其视为 SPI_prepare_extended 的一个选项。现在,当运行包含任何 CALL 或 DO 命令的非原子过程或 DO 块时,plpgsql 会创建一个 ResourceOwner,该 ResourceOwner 将用于固定 CALL/DO 命令的计划。(在原子上下文中,我们像以前一样只使用 CurrentResourceOwner。)完成此操作后,我们可以像往常一样保存 CALL/DO 计划,无论它们是否跨事务边界使用。对于简单参数表达式的简单过程的 CALL,这似乎可以提高大约 2 倍的速度。通过像这样限制额外 ResourceOwner 的创建,在无法从中受益的情况下,基本上没有任何惩罚。Pavel Stehule,由我进一步修改。讨论:https://postgr.es/m/CAFj8pRCLPdDAETvR7Po7gC5y_ibkn_-bOzbeJb39WHms01194Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ee895a655ce4341546facd6f23e3e8f2931b96bf

  • psql 的 helpSQL() 函数的代码审查。识别单词边界的循环可能会访问到输入字符串的末尾。这可能永远不会导致实际崩溃,但它会让 valgrind 不高兴。当输入有两个单词但我们只匹配第一个单词时,尝试不同单词数的逻辑不起作用,例如“\h with select”。(我们必须“继续”pass 循环,而不是“break”。)计算 nl_count 的逻辑很奇怪,并且在至少两条代码路径中可能会以 nl_count = 0 调用 PageOutput,从而导致无法分页应馈送到寻呼机的输出。此外,在 v12 及更高版本中,nl_count 计算尚未更新以考虑添加 URL。保存命令语法详细信息的 PQExpBuffer 没有被释放,导致会话生命周期的内存泄漏。在这里,改进了一些注释,为变量选择了一个更具描述性的名称,修复了另一个变量的不一致数据类型选择。来自 Alexander Lakhin 的错误 #16837。此代码非常旧,因此回溯到所有受支持的分支。Kyotaro Horiguchi 和 Tom Lane。讨论:https://postgr.es/m/16837-479bcd56040c71b3@postgresql.org https://git.postgresql.org/pg/commitdiff/f76a85000bba2f1b1c926cbbe525e47b246215f1

  • 抑制来自提交 ee895a655 的编译器警告。由于某些晦涩的原因,一些 buildfarm 成员现在生成关于 plpgsql_call_handler 的“retval”变量可能使用未初始化的抱怨。它似乎并不比提交之前更不安全,但这些抱怨是(大多数?)新的。我相信在声明变量时初始化变量足以消除这些抱怨。我还注意到,一些编译器正在警告 setjmp 覆盖同一个变量,这可能更具辩护性。将其标记为 volatile 以消除该警告。此外,重新排列逻辑以使 procedure_resowner 具有单个初始化点,希望消除一些关于它的 setjmp 覆盖警告。(将其标记为 volatile 也可以,但它的同级变量依赖于单次赋值,因此让我们坚持使用该方法。)讨论:https://postgr.es/m/E1l4F1z-0000cN-Lx@gemulon.postgresql.org https://git.postgresql.org/pg/commitdiff/7292fd8f1c781278021407276474d9188845113d

  • 重新考虑最近添加的 SPI 接口。SPI_execute_with_receiver 和 SPI_cursor_parse_open_with_paramlist 是 v14 中的新功能(参见提交 2f48ede08)。在它们发布之前,让我们更改其 API 以遵循最近由 SPI_prepare_extended 等建立的实践:将所有可选参数放入调用者应预先归零的结构中。希望允许在将来添加更多选项,而无需破坏 API 或继续增加新的 SPI 入口点。考虑到这一点,为它们选择稍微通用的名称:SPI_execute_extended 和 SPI_cursor_parse_open。讨论:https://postgr.es/m/CAFj8pRCLPdDAETvR7Po7gC5y_ibkn_-bOzbeJb39WHms01194Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/d5a83d79c9f9b660a6a5a77afafe146d3c8c6f46

  • 文档:改进 UNNEST() 的文档。根据用户的问题,说明 UNNEST() 按存储顺序返回数组元素;还提供一个示例来阐明多维数组的行为。在这里,还阐明 SELECT 参考页面中对 WITH ORDINALITY 的描述。这些细节已经在 7.2.1.4 中给出,但参考页面不应省略细节。回溯到 v13;旧版本中的表格中没有空间。讨论:https://postgr.es/m/FF1FB31F-0507-4F18-9559-2DE6E07E3B43@gmail.com https://git.postgresql.org/pg/commitdiff/662affcfe9e816584e3d8602b3b4005236931bbb

  • 使 ecpg 的 rjulmdy() 和 rmdyjul() 与它们的声明一致。我们在 extern 声明中有 "short *mdy",但在实际函数定义中有“short mdy[3]”。根据 C99,这些是等价的,但最近版本的 gcc 已开始发布关于不一致的警告。在警告变得更加普遍之前清理它。回溯,以防有人想使用前沿编译器构建旧的 PG 版本。讨论:https://postgr.es/m/2401575.1611764534@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/1b242f42ba1e732b202f35265ab1a1614ce7d859

  • 修复具有非对称分区集合的哈希分区剪枝。 perform_pruning_combine_step() 函数没有考虑到哈希分区中使用的分区索引数量;更糟糕的是,get_matching_hash_bounds() 函数也出错了。这些错误在所有分区具有相同模数且没有分区丢失的常见情况下被掩盖了。然而,在存在丢失或大小不相等的分区时,我们可能会错误地剪枝一些需要扫描的分区,从而导致查询结果静默错误。虽然对此进行最小改动的修复方法可以是导出 get_partition_bound_num_indexes 并使错误的函数使用它,但我认为该函数根本就不应该存在。PartitionBoundInfoData 缺少对其 indexes[] 数组长度的任何明确记录,这不是合理的数据结构设计。也许当它总是被假定为等于 ndatums 时,这还可以接受,但是一旦这种情况不再成立,就应该采取一些措施。添加一个明确的 "nindexes" 字段使得 partition_bounds_equal() 和 partition_bounds_copy() 比以前更简单、更安全、更快,并且也消除了其他一些地方对分区索引数量规则的显式了解。此更改还使 get_hash_partition_greatest_modulus 过时。我保留了它,以防任何外部代码使用它,但没有核心代码再使用它。根据 Michał Albrycht 的错误 #16840。回溯补丁到 v11,哈希分区代码就是从那里引入的。(在回溯分支中,将新字段添加到 PartitionBoundInfoData 的末尾,以最小化 ABI 风险。)讨论:https://postgr.es/m/16840-571a22976f829ad4@postgresql.org https://git.postgresql.org/pg/commitdiff/1d9351a87c9a9e82c7091aab03d9299982670ce0

  • 消除另一个 gcc 11 警告。根据构建场和本地实验,最前沿的 gcc 不相信 reorder_function_arguments() 中的 MemSet 是安全的。通过添加一个明确的检查来确保 pronargs 不是负数,并将 MemSet 更改为 memset 来消除警告。(似乎只需进行一项更改就足以消除 -O2 级别的警告,但为了确保万无一失,我们两者都做。)https://git.postgresql.org/pg/commitdiff/1046dbedde2fc3fe55f007ff3255ab65ab98f858

  • 文档:改进 SET/SHOW 的交叉引用。对应的函数 set_config 和 current_setting 大部分都没有超链接。稍微澄清一下它们的描述。讨论:https://postgr.es/m/161183356250.4077.687338658090583892@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/f743a2bbd4e511ad58b6ce01f81841e5e1611474

Amit Kapila 推送

David Rowley 推送

  • 修复堆向后扫描中的假设错误。heapgettup() 和 heapgettup_pagemode() 都错误地设置了向后扫描中要扫描的第一个页面,其中要扫描的页面数量由 heap_setscanlimits() 指定。当 startBlk 为 0 时,代码错误地从关系的末尾开始扫描,或者在其他情况下从 startBlk - 1 开始扫描,当只扫描一部分页面时,这两种方式都是不正确的。这里的修复方法是检查 heap_setscanlimits() 是否更改了要扫描的页面数量,如果是,则在向后扫描期间将要扫描的第一个页面设置为指定范围内的最后一个页面。当 9.5 版本中添加 heap_setscanlimits() 时(回溯到 7516f5259),忘记了对这段代码进行适当调整。然而,在实践中,核心代码中没有任何地方在使用 heap_setscanlimits() 后执行向后扫描,但有可能扩展程序以这种方式使用堆函数,因此需要回溯补丁。即将到来的补丁将使用 heap_setscanlimits() 进行向后扫描,因此必须先修复此问题才能将其引入。作者:David Rowley 讨论:https://postgr.es/m/CAApHDvpGc9h0_oVD2CtgBcxCS1N-qDYZSeBRnUh+0CWJA9cMaA@mail.gmail.com 回溯到:9.5,所有支持的版本 https://git.postgresql.org/pg/commitdiff/16dfe253e31f75b60e93acc0c2b5bbf19936c074

Peter Eisentraut 推送

Robert Haas 推送

  • 删除 CheckpointLock。到目前为止,我们在执行检查点或重启点时都持有此锁,但 2004 年的提交 076a055acf3c55314de267c62b03191586d79cf6 和 2009 年的提交 7e48b77b1cebb9a43f9fdd6b17128a0ba36132f9 共同消除了对它的所有需求。在当前代码中,只有一个进程有权尝试检查点:在正常操作期间为检查点进程,或者在单用户操作期间为 postmaster。所以,我们不需要锁。进行此更改的一个可能担忧是,这意味着先前由于之前的 LWLockAcquire() 而使 HOLD_INTERRUPTS() 生效的相当多的代码现在将在没有它的情况下运行。这可能意味着 ProcessInterrupts() 在以前没有调用它的地方被调用。但是,这似乎不太可能做很多事情,因为检查点进程没有任何信号映射到 die(),因此不清楚例如 ProcDiePending = true 如何首先发生。与 ClientConnectionLost 和恢复冲突类似。此外,如果存在任何此类问题,我们可能希望修复它们而不是恢复此更改,因为在暂停中断处理的情况下运行大量代码通常是不好的。由我进行的补丁,根据 Amul Sul 的询问。Tom Lane 和 Michael Paquier 的审查。讨论:http://postgr.es/m/CAAJ_b97XnBBfYeSREDJorFsyoD1sHgqnNuCi=02mNQBUMnA=FA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/d18e75664a2fda2e4d5cc433d68e37fc0e9499f2

  • 将 StartupCLOG() 调用移动到我们初始化 ShmemVariableCache 之后。以前,hot_standby=off 代码路径在恢复结束时执行此操作,而 hot_standby=on 代码路径在恢复开始时执行此操作。最好只在一个地方执行此操作,因为 (a) 它更简单,(b) StartupCLOG() 是微不足道的,因此尝试推迟工作没有用,以及 (c) 这将使简化其他一些逻辑成为可能。由我进行的补丁,Heikki Linnakangas 审查。讨论:http://postgr.es/m/CA+TgmoZYig9+AQodhF5sRXuKkJ=RgFDugLr3XX_dz_F-p=TwTg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/1f113abdf87cd085dee3927960bb4f70442b7250

  • 在 clog_redo() 中,不要设置 XactCtl->shared->latest_page_number。注释不再准确,并且自从引入热备用以来一直不完全准确。这里的最初想法是,StartupCLOG() 不会在恢复结束之前被调用,因此当达到此代码时,此值将未初始化,但热备用仅在 hot_standby=off 时才使其为真,而提交 1f113abdf87cd085dee3927960bb4f70442b7250 意味着此值现在始终在回放开始之前初始化。此代码的最初目的是绕过 SimpleLruTruncate() 中的健全性检查,这种情况将不再发生:现在,如果有问题,该健全性检查可能会在恢复期间触发。这可能是一件好事,因为在当前的代码库中,latest_page_number 应该始终初始化,因此我们期望健全性检查应该通过。如果它没有通过,则说明出了问题,并且对此进行抱怨是适当的。由我进行的补丁,Heikki Linnakangas 审查。讨论:http://postgr.es/m/CA+TgmoZYig9+AQodhF5sRXuKkJ=RgFDugLr3XX_dz_F-p=TwTg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/0fcc2decd485a61321a3220d8f76cb108b082009

  • 在 TrimCLOG() 中,不要重置 XactCtl->shared->latest_page_number。由于 CLOG 页码没有直接记录在检查点记录中,我们必须使用 ShmemVariableCache->nextXid 来确定恢复开始时最新的 CLOG 页码。然而,随着恢复的进行,CLOG/EXTEND 记录的重放会更新我们对最新页码的概念,我们应该依赖于该值的准确性,而不是基于更新的 nextXid 概念重新计算该值。无论如何,在恢复期间,ShmemVariableCache->nextXid 只是一个近似值,而 CLOG/EXTEND 记录是对 SLRU 如何更新的权威表示。提交 0fcc2decd485a61321a3220d8f76cb108b082009 使这种简化成为可能,因为在该更改之前,clog_redo() 可能会在此处注入一个虚假的值,而我们希望在进入正常运行之前消除该值。补丁由我提交,Heikki Linnakangas 审核。讨论:http://postgr.es/m/CA+TgmoZYig9+AQodhF5sRXuKkJ=RgFDugLr3XX_dz_F-p=TwTg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/69059d3b2f0754c8e661ba479f7121e6631cdf4a

Andres Freund 推送

Fujii Masao 推送

  • postgres_fdw:添加用于丢弃缓存连接的函数。此提交引入了两个新函数 postgres_fdw_disconnect() 和 postgres_fdw_disconnect_all()。前者函数丢弃到指定外部服务器的缓存连接。后者丢弃所有缓存连接。如果连接在当前事务中使用,则不会关闭,并会发出警告消息。例如,当用户想要显式关闭不再需要的外部服务器连接,并防止它们占用外部服务器连接容量时,这些函数很有用。作者:Bharath Rupireddy,由 Fujii Masao 稍作调整。审核人:Alexey Kondratov、Zhijie Hou、Zhihong Yu、Fujii Masao。讨论:https://postgr.es/m/CALj2ACVvrp5=AVp2PupEm+nAC8S4buqR3fJMmaCoc7ftT0aD2A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/411ae64997dc3a42d19eda6721c581841ce2cb82

  • postgres_fdw:稳定 postgres_fdw_disconnect_all() 的回归测试。提交 411ae64997 中添加的回归测试导致了 buildfarm 失败。它们的原因是测试中输出的警告消息的顺序不稳定。为了解决这个问题,此提交在执行生成这些警告的测试时,临时将 client_min_messages 设置为 ERROR。根据 buildfarm 失败。讨论:https://postgr.es/m/2147113.1611644754@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/6adc5376dca4ef8b7d591c0ee7338cb9ff660216

  • postgres_fdw:修复 -DENFORCE_REGRESSION_TEST_NAME_RESTRICTIONS 的测试失败。回归测试创建的角色应具有以“regress_”开头的名称,而提交 411ae64997 中引入的测试没有这样做。根据 buildfarm 成员 longfin。讨论:https://postgr.es/m/73fc5ae4-3c54-1262-4533-f8c547de2e60@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/0c3fc09fe359a6dc46f1870ceccf60ec60396bc9

  • postgres_fdw:修复 CLOBBER_CACHE_ALWAYS 的测试。当启用 CLOBBER_CACHE_ALWAYS 时,提交 708d165ddb 和 411ae64997 中添加的回归测试导致 buildfarm 失败。此提交稳定了这些测试。由 postgres_fdw 建立的外部服务器连接的行为取决于是否启用 CLOBBER_CACHE_ALWAYS。如果未启用,则会缓存这些连接。另一方面,如果启用,则当在事务块外部建立连接时,不会缓存这些连接(即,它们会在建立它们的查询结束时立即关闭)。因此,后续的 postgres_fdw_get_connections() 无法列出这些连接,并且 postgres_fdw_disconnect() 无法关闭它们(因为它们已经关闭)。当在事务块内部建立连接时,无论是否启用 CLOBBER_CACHE_ALWAYS,都会缓存它们。但是,如果启用,它们会立即标记为无效,否则不会。这会导致后续的 postgres_fdw_get_connections() 在“有效”列中返回不同的结果,具体取决于是否启用 CLOBBER_CACHE_ALWAYS。此提交防止上述行为差异影响回归测试。根据 trilobite 上的 buildfarm 失败。原始补丁由 Bharath Rupireddy 提供。我 (Fujii Masao) 从中提取了回归测试修复程序并稍作修改。报告人:Tom Lane。作者:Bharath Rupireddy。审核人:Fujii Masao。讨论:https://postgr.es/m/2688508.1611865371@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/f77717b2985aa529a185e6988de26b885ca10ddb

Michaël Paquier 推送

Peter Geoghegan 推送

Andrew Gierth 推送

  • 对于非严格的反序列化调用,不要添加跳出调整。构建聚合表达式步骤时,严格检查需要一个跳出跳转,以便在遇到空值时跳过,因此存在一个需要稍后调整的步骤列表。对于实际上不严格的步骤,将条目添加到该列表中是无害的,但会有一个断言捕获它们。这会导致在断言构建中出现虚假错误,对于触发使用非严格反序列化函数聚合的并行聚合的数据集(核心系统中不存在此类聚合)。修复方法是当不需要调整条目时,不要添加它。回溯到代码引入的 11 版本。根据 PostGIS 项目的 Darafei (Komzpa) 的报告;由我分析和修补。讨论:https://postgr.es/m/87mty7peb3.fsf@news-spur.riddles.org.uk https://git.postgresql.org/pg/commitdiff/a3367aa3c4552170004c92369681730d85e384c6

Heikki Linnakangas 推送了

Álvaro Herrera 推送了

Thomas Munro 推送了

Alexander Korotkov 推送了

Noah Misch 推送了

待处理的补丁

Amit Langote 发送了另一个补丁修订版,以延迟设置 ForeignScanState.resultRelInfo,在所有结果关系中设置 ResultRelInfo.ri_PartitionRoot,并延迟初始化结果关系信息。

Takamichi Osumi 发送了另一个补丁修订版,以确保存档恢复不会丢失数据。

Amit Langote 发送了另一个补丁修订版,以在分区表中创建外键触发器,并在跨分区更新期间正确强制执行外键。

Pavel Borisov 发送了另一个补丁修订版,以使用新的 CONFIGURATION 指令自动生成 HASH 和 LIST 分区。

Bucoo 发送了另一个补丁修订版,以支持使用批处理 hashagg 和排序的并行联合/区分/聚合。

Vigneshwaran C 发送了另一个补丁修订版,以在 CREATE/ALTER SUBSCRIPTION 操作期间识别发布者中缺少的发布。

Bertrand Drouvot 发送了一个补丁,以向 pg_dump 添加 --extension 标志以转储特定的扩展。

David Cramer 发送了另外两个补丁修订版,以在事务失败时抛出错误并回滚,而不是静默回滚。

Konstantin Knizhnik 发送了另外两个补丁修订版,以使 auto_explain 创建统计信息。

Michaël Paquier 和 Sehrope Sarkuni 交换了将 sha1 呈现给 SQL 的补丁。

Takayuki Tsunakawa、Iwata Aya 和 Kirk Jamison 交换了向 libpq 添加跟踪的补丁。

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

Masahiko Sawada 发送了另外两个补丁修订版,以在堆和索引 vacuum 之前选择 vacuum 策略,如果索引没有增长,则跳过 btree bulkdelete,并禁用针对反环绕和激进 vacuum 的索引清理。

Peter Smith 和 Amit Kapila 交换了补丁,以使 tablesync 工作人员每次可以使用多个事务。

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

Dilip Kumar 发送了另外三个补丁修订版,以提供一个新界面来获取恢复暂停状态。

David Rowley 发送了另一个补丁修订版,以添加 TID 范围扫描以支持高效扫描 TID 范围。

Bertrand Drouvot 发送了另一个补丁修订版,以在备用服务器上实现最小逻辑解码。

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

Jim Finnerty 发送了另一个补丁修订版,以实现 64 位 XID。

Amit Langote 发送了另一个补丁修订版,以彻底修改更新计算新元组的方式,并修改如何处理继承的更新和删除。

Li Japin 发送了一个补丁,以修复 ALTER SUBSCRIPTION ... SET PUBLICATION 的文档。

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

Takashi Menjo 发送了另一个补丁修订版,使其可以使用 NVRAM 作为 WAL 缓冲区。

Masahiko Sawada 发送了另一个补丁修订版,以实现涉及多个 postgres 外部服务器的事务。

Dean Rasheed 发送了另一个补丁修订版,使其可以在表达式上创建和使用扩展统计信息。

Amit Langote 发送了另一个补丁修订版,以导出 get_partition_for_tuple(),并避免对某些 RI 检查使用 SPI。

Denis Laxalde 发送了一个补丁,在 pg_upgrade 中将服务器启动时的默认事务设置为只读。

Amit Khandekar 发送了另一个补丁修订版,通过在块上使用 popcount64() 而不是异或 char 值来加速 tsvector 的两个 gist 索引签名的异或运算,并避免 pg_popcount32/64() 调用的函数指针解引用。

Konstantin Knizhnik 发送了另一个补丁修订版,以扩展 auto_explain 扩展,以便在选择性估计不佳的情况下生成扩展统计信息,并在计算连接选择性时考虑扩展统计信息。

Michail Nikolaev 发送了另一个补丁修订版,以在备用机上添加对索引 LP_DEAD 提示位的完全支持。

Nathan Bossart 发送了另一个补丁修订版,以避免过早地将段标记为准备好进行归档。

Anastasia Lubennikova 发送了另一个补丁修订版,旨在修复一个以非标准 ACL 导致 pg_upgrade 失败的错误。

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

Kyotaro HORIGUCHI 和 Heikki Linnakangas 交换了补丁以添加 catcache 过期。

Heikki Linnakangas 和 Daniel Gustafsson 交换了补丁以支持在运行中的实例中启用/禁用页面校验和。

Mark Rofail 发送了两个关于实现外键数组的补丁修订版。

Vigneshwaran C 发送了三个关于使用新函数 pg_print_backtrace() 打印任何 postgres 进程的回溯的补丁修订版,该函数是调用该函数的实例的一部分。

Michaël Paquier 和 Daniel Gustafsson 交换了补丁,以使 NSS 可以用作 libpq 的 TLS 提供程序。

Bharath Rupireddy 发送了两个补丁修订版,以避免在 slot_store_error_callback 和 conversion_error_callback 中访问目录。

Takamichi Osumi 发送了一个补丁,用于记录何时/何地将 wal_level 从较高级别更改为“minimal”,以使旧备份无效或向用户发出警报。

Amul Sul 发送了另一个补丁修订版,以使用全局屏障实现 wal 禁止状态。

Greg Nancarrow 发送了另一个补丁修订版,以使可以在 INSERT ... SELECT 中使用并行选择,以及在安全的情况下进行并行 INSERT 或 SELECT。

Justin Pryzby 发送了另一个补丁修订版,以使可以在分区表上运行 CREATE INDEX CONCURRENTLY。

Andrew Dunstan 发送了两个补丁修订版,以实现 PostgresNodePath,它是 PostgresNode 的子类,在给定 PostgreSQL 安装路径的上下文中运行命令。

David Rowley 发送了另一个补丁修订版,以添加结果缓存执行器节点。

Nathan Bossart 发送了两个关于向 VACUUM 添加 PROCESS_TOAST 选项的补丁修订版。

Paul Martinez 发送了一个补丁,以澄清不允许复制连接时出现的消息。

Jacob Champion 发送了一个补丁,用于保存角色的原始身份验证身份以进行日志记录。

Mark Dilger 发送了三个关于实现新的 pg_amcheck contrib 扩展的补丁修订版。

Hou Zhijie 发送了另一个补丁修订版,以添加一个新的 GUC 和相应的表选项 enable_parallel_dml。

Marco Montagna 发送了一个补丁,通过在为相同名称生成的名字前加上随机数来降低 fdw 预备语句冲突的可能性。

Peter Eisentraut 发送了另一个针对 pg_dump 的补丁修订版,以修复继承生成列的转储。

Antonin Houska 发送了另一个补丁修订版,以使用撤消日志清理孤立文件。

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

Álvaro Herrera 发送了另一个补丁修订版,以添加 pg_atomic_monotonic_advance_u64,在 xlog.c 中使用原子操作,并添加屏障。

Fabien COELHO 发送了另一个补丁修订版,以向 pgbench 添加屏障。

Thomas Munro 发送了两个补丁修订版,以使用全局屏障修复 Windows 上的 DROP TABLESPACE,并使用条件变量进行 ProcSignalBarriers。

Andrew Dunstan 发送了另一个补丁修订版,以允许从客户端证书匹配整个 DN。

Thomas Munro 发送了一个补丁,在运行 dsm_detach() 回调时保持中断。

Joel Jacobson 发送了一个补丁,以改进可以在系统视图中为零的 oid 列的文档。

Vigneshwaran C 发送了另一个补丁修订版,以添加 CREATE PUBLICATION 的模式支持。

Tom Lane 发送了一个补丁,用于记录系统目录的外键关系。

Euler Taveira de Oliveira 发送了另一个补丁修订版,以实现逻辑复制的行过滤。