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

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 提供。

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

已应用补丁

Tom Lane 提交

  • 更新了时区数据文件至 tzdata release 2021a。俄罗斯(伏尔加格勒时区)和南苏丹的 DST 法规变更。澳大利亚、巴哈马、伯利兹、百慕大、加纳、以色列、肯尼亚、尼日利亚、巴勒斯坦、塞舌尔和瓦努阿图的历史性修正。特别是,澳大利亚/库里时区已得到修正,使其与澳大利亚/霍巴特时区完全相同。 https://git.postgresql.org/pg/commitdiff/c7edf4ac246b67073563354c2808c78868cbac36

  • 使 storage/standby.h 能够独立编译。自从 commit 0650ff230 以来,该文件一直因引用 typedef TimestampTz 但未包含相应头文件而未能通过 headerscheck/cpluspluscheck 验证。 https://git.postgresql.org/pg/commitdiff/a4b03de589c1df0845e9732da203f505f2eedb6d

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

  • 修复了对 FUNCTION TRANSFORM 子句的 ruleutils 支持中的错误。我偶然发现这个功能因为一个错误的 Assert 而导致核心转储。雪上加霜的是,自 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 存储过程的原始实现(尤其是 commit d92bc83c4)遗留的技术债务。该补丁(或者更确切地说,修复其最严重错误的后续补丁)迫使我们在非原子上下文中每次都重新规划 CALL 和 DO 语句。这不是因为任何根本原因,而仅仅是因为使用已保存的计划需要一个 ResourceOwner 来持有计划的引用计数,而我们手头没有合适的 resowner,并且可用的 API 也不支持使用一个。虽然创建 CALL/DO 的“计划”成本不高,但在重复执行时,这些周期会累积起来。因此,此补丁进行了以下 API 更改:* GetCachedPlan/ReleaseCachedPlan 被修改,允许调用者指定用于固定计划的 resowner,而不是强制使用 CurrentResourceOwner。* spi.c 增加了一个“SPI_execute_plan_extended”入口点,允许调用者指定用于固定计划的 resowner。这借鉴了最近添加的 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,用于固定 CALL/DO 命令的计划。(在原子上下文中,我们像以前一样使用 CurrentResourceOwner。)完成此操作后,我们可以像往常一样保存 CALL/DO 计划,无论它们是否跨事务边界使用。这似乎能将具有几个简单参数表达式的 trivial 过程的 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"),尝试不同单词数量的逻辑不起作用。(我们必须“continue” pass 循环,而不是“break”。)nl_count 的计算方式管理得很奇怪,并且在至少两个代码路径中可能最终调用 PageOutput 时 nl_count = 0,导致应由分页器处理的输出未能分页。此外,在 v12 及更高版本中,nl_count 计算尚未更新以考虑添加的 URL。持有命令语法详细信息的 PQExpBuffer 未被释放,导致了会话寿命的内存泄漏。在此期间,改进了一些注释,为变量选择了更具描述性的名称,并修复了另一个变量的数据类型选择不一致问题。根据 bug #16837,作者:Alexander Lakhin。此代码非常旧,因此向所有受支持的分支回溯。作者:Kyotaro Horiguchi 和 Tom Lane。讨论:https://postgr.es/m/16837-479bcd56040c71b3@postgresql.org https://git.postgresql.org/pg/commitdiff/f76a85000bba2f1b1c926cbbe525e47b246215f1

  • 抑制 commit ee895a655 产生的编译器警告。由于一些晦涩的原因,一些 buildfarm 成员现在开始抱怨 plpgsql_call_handler 的“retval”变量可能未初始化就被使用。它似乎并不比该提交之前更不安全,但这些抱怨(绝大多数?)是新的。我相信在声明处初始化该变量足以解决此问题。我还注意到一些编译器警告 setjmp 正在覆盖同一个变量,这或许有点道理。将其标记为 volatile 以消除警告。另外,重新排列逻辑以使 procedure_resowner 只有一个初始化点,希望以此来消除关于它的某些 setjmp-clobber 警告。(将其标记为 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 中的新功能(参见 commit 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 过时。我将其保留以防外部代码使用它,但核心代码不再使用。根据 bug #16840,作者:Michał Albrycht。回溯到 v11,哈希分区代码是在那时引入的。(在回溯分支中,在 PartitionBoundInfoData 的末尾添加新字段以尽量减少 ABI 风险。)讨论:https://postgr.es/m/16840-571a22976f829ad4@postgresql.org https://git.postgresql.org/pg/commitdiff/1d9351a87c9a9e82c7091aab03d9299982670ce0

  • 消除另一个 gcc 11 警告。根据 buildfarm 和本地实验,最新的 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 的 commit 7516f5259 中添加 heap_setscanlimits() 时,此代码的适当调整被遗忘了。然而,实际上,核心代码中没有地方在使用了 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。到目前为止,我们在执行 checkpoint 或 restartpoint 时都持有此锁,但 2004 年的 commit 076a055acf3c55314de267c62b03191586d79cf6 和 2009 年的 commit 7e48b77b1cebb9a43f9fdd6b17128a0ba36132f9 一起,已经消除了对它的所有需求。在当前代码中,只有一个进程有权尝试 checkpoint:要么是 checkpointer(在正常操作期间),要么是 postmaster(在单用户操作期间)。所以,我们不需要锁。进行此更改的一个可能担忧是,这意味着许多以前由于之前的 LWLockAcquire() 而处于 HOLD_INTERRUPTS() 状态的代码现在将在此状态下运行。这可能意味着 ProcessInterrupts() 会在以前未被调用的地方被调用。然而,这似乎不太可能产生太多影响,因为 checkpointer 没有映射到 die() 的信号,所以不清楚例如 ProcDiePending = true 究竟是如何发生的。ClientConnectionLost 和 recovery conflicts 也是如此。另外,如果存在任何此类问题,我们可能希望修复它们而不是回滚此更改,因为在中断处理被暂停的情况下运行大量代码通常是不好的。补丁作者:我,根据 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。注释不再准确,自 Hot Standby 引入以来一直不完全准确。最初的想法是 StartupCLOG() 要到恢复结束时才会被调用,因此当代码到达这里时,此值将未初始化,但 Hot Standby 只在 hot_standby=off 时才这样做,而 commit 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 页码没有直接记录在 checkpoint 记录中,我们必须使用 ShmemVariableCache->nextXid 来找出恢复开始时的最新 CLOG 页码。但是,随着恢复的进行,重放 CLOG/EXTEND 记录将更新我们对最新页码的认识,我们应该依赖于此的准确性,而不是根据对 nextXid 的更新认识来重新计算该值。在恢复期间,ShmemVariableCache->nextXid 只是一个近似值,而 CLOG/EXTEND 记录是 SLRU 如何更新的权威表示。commit 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() 的回归测试。commit 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_" 开头,而 commit 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 的测试。commit 708d165ddb 和 411ae64997 中添加的回归测试在启用 CLOBBER_CACHE_ALWAYS 时导致 buildfarm 失败。此提交稳定了这些测试。postgres_fdw 建立的远程服务器连接的行为取决于是否启用 CLOBBER_CACHE_ALWAYS。如果未启用,则这些连接会被缓存。另一方面,如果启用,当连接在事务块外建立时,它们不会被缓存(即,它们会在建立它们的查询结束时立即关闭)。因此,随后的 postgres_fdw_get_connections() 无法列出这些连接,postgres_fdw_disconnect() 也无法关闭它们(因为它们已关闭)。当连接在事务块内建立时,无论是否启用 CLOBBER_CACHE_ALWAYS,它们都会被缓存。但如果启用,它们会被立即标记为无效,否则不会。这导致随后的 postgres_fdw_get_connections() 根据是否启用 CLOBBER_CACHE_ALWAYS 在“valid”列中返回不同的结果。此提交阻止上述行为差异影响回归测试。根据 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 推送

  • 不要为非严格的反序列化调用添加退出调整。在构建聚合表达式步骤时,严格检查需要一个退出跳转来处理遇到 null 值的情况,因此有一个步骤列表需要稍后进行调整。为并非真正严格的步骤添加到该列表中的条目是无害的,除了有一个 Assert 会捕获它们。这会导致在断言构建中出现虚假错误,对于触发具有非严格反序列化函数的聚合并行聚合的数据集(核心系统中不存在这样的聚合)。通过在不需要时(即,当步骤实际上不是严格的时)不添加调整条目来修复。回溯到引入该代码的 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 提交了一个补丁的又一次修订,用于通过 batch hashagg 和 sort 支持并行 union/distinct/aggregate。

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 receiver 报告 WAL 统计信息。

Masahiko Sawada 提交了两个补丁的又一次修订,用于在进行堆和索引 vacuum 之前选择 vacuum 策略,如果索引没有增长则跳过 btree bulkdelete,并为防溢出和积极 vacuum 禁用索引清理。

Peter Smith 和 Amit Kapila 交换了补丁,使 tablesync 工作程序能够各自使用多个事务。

Bruce Momjian 提交了四个补丁的又一次修订,以实现密钥管理。

Dilip Kumar 提交了三个补丁的又一次修订,提供了一个新的接口来获取恢复暂停状态。

David Rowley 提交了一个补丁的又一次修订,用于向 TID Range Scans 添加支持,以高效扫描 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() 而不是 XOR 字符值来加速 tsvectors 的两个 gist 索引签名的 XOR 操作,并避免对 pg_popcount32/64() 调用进行函数指针解引用。

Konstantin Knizhnik 提交了一个补丁的又一次修订,用于扩展 auto_explain 扩展以在选择性估计错误的情况下生成扩展统计信息,并在计算连接选择性时考虑扩展统计信息。

Michail Nikolaev 提交了一个补丁的又一次修订,用于在待机状态下添加对索引 LP_DEAD 提示位的完全支持。

Nathan Bossart 提交了一个补丁的又一次修订,用于避免过早将段标记为 ready-for-archival。

Anastasia Lubennikova 提交了一个补丁的又一次修订,旨在修复一个导致 pg_upgrade 因非标准 ACL 而失败的错误。

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 提交了一个补丁的又一次修订,用于添加 Result Cache 执行器节点。

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 提交了两个补丁的修订,用于在运行 dsm_detach() 回调时保持中断,并为 ProcSignalBarriers 使用条件变量。

Andrew Dunstan 提交了一个补丁的又一次修订,允许从客户端证书匹配整个 DN。

Thomas Munro 提交了一个补丁,用于在运行 dsm_detach() 回调时保持中断。

Joel Jacobson 提交了一个补丁,用于改进关于系统视图中 OID 列可能为零的文档。

Vigneshwaran C 提交了一个补丁的又一次修订,用于为 CREATE PUBLICATION 添加模式支持。

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

Euler Taveira de Oliveira 提交了一个补丁的又一次修订,用于为逻辑复制实现行过滤。