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

PostgreSQL 周报 - 2021 年 7 月 11 日

发布于 2021-07-12,作者 PWN
PWN

PostgreSQL 周报 - 2021 年 7 月 11 日

本周人物

PostgreSQL 产品新闻

pg-wrapper 1.0.0 发布,这是 PHP 的 pgsql 扩展的一个包装器。 发布

JDBC 42.2.23 发布 https://jdbc.postgresql.ac.cn/documentation/changelog.html#version_42.2.23

Ora2Pg 22.1 发布,这是一个将 Oracle 数据库迁移到 PostgreSQL 的工具。 https://github.com/darold/ora2pg/blob/master/changelog

credcheck 0.1.1 发布,这是一个用于纯文本密码的密码检查机制。 发布

pg_builder 1.0.0 发布,这是 PostgreSQL 的一个 PHP 查询构建器。 发布

PG-Strom 3.0 发布,这是一个使用 GPU 和相关硬件加速 OLAP 查询的 PostgreSQL 扩展。 发布

Datasentinel Version 2021.05 发布,这是一个用于监控和报告 PostgreSQL 等信息的应用程序。 发布

PostgreSQL 职位(7 月份)

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

PostgreSQL 相关新闻

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

本周 PostgreSQL 周报由 David Fetter 提供。

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

已应用补丁

Amit Kapila 提交

Peter Eisentraut 提交

Dean Rasheed 已推送

Tom Lane 提交

  • 重新考虑 detach-partition-concurrently-[34] 中的阻塞注解。在 741d7f104 中,我曾试图让取消步骤的报告在 pg_cancel_backend() 步骤之后输出,因为这之前是最常见的排序方式。然而,这并不能确保取消的步骤不会更晚报告,如最近在 buildfarm 成员 idiacanthus 上发生的失败所示。与其通过额外的注解使事情更加复杂,不如强制取消的效果首先报告。这看起来也并非不自然。回溯兼容至 v14,即这些测试用例出现时。报告:https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=idiacanthus&dt=2021-07-02%2001%3A40%3A04 https://git.postgresql.org/pg/commitdiff/c04c767059b8460b99f6aa4aae5450ab3ee257a3

  • 减少 LookupOpclassInfo() 中缓存清除测试的开销。提交 03ffc4d6d 添加了在 CLOBBER_CACHE_ALWAYS 启用时绕过 LookupOpclassInfo 中所有缓存行为的逻辑。我似乎没有仔细考虑这会带来什么成本,但最近的调查显示成本非常高:它大约使缓存清除测试运行时间翻倍。当尝试测试 opclass 缓存加载逻辑本身时,此行为似乎是有价值的,但对于其他目的,成本过高。因此,让我们回溯到仅当 debug_invalidate_system_caches_always 至少为 3 时才执行此操作;或者在旧分支中,当定义了 CLOBBER_CACHE_RECURSIVELY 时。同时,清理 LookupOpclassInfo 中的一些其他小问题。重新排列代码,以便在我们遭受 OOM 尝试分配新条目空间的情况下(这似乎是我的疏忽),不会留下损坏的缓存条目(导致后续核心转储)。(这似乎是我的疏忽,源于 03ffc4d6d。)此外,在 >= v13 中,停止分配一个多余的数组条目。这显然是 851b14b0c 中粗糙回滚的遗留物。回溯兼容至所有支持的分支,主要目的是减少缓存清除 buildfarm 动物的运行时间。讨论:https://postgr.es/m/1370856.1625428625@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/9753324b7d9eba0aaf7e12942f52c240bfc7da7c

  • 文档:添加关于带有小数分钟 UTC 偏移量的时间戳的信息。我们的代码长期以来一直支持带有小数分钟 UTC 偏移量的时间戳,但主文档中对此可能性没有提及,只有在附录 B 中有非常间接的引用。改进这一点。讨论:https://postgr.es/m/162543102827.697.5755498651217979813@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/ab2e19987ff66f83dfb99b5c541d9e05e8b0ede3

  • 避免在 postgres_fdw 的 conversion_error_callback 中执行目录查找。与 50371df26 一样,这是一个坏主意,因为回调函数无法真正知道正在抛出哪个错误,因此无法确定尝试目录访问是否安全。我们不必将这些访问推送到主线代码中(通常是浪费周期),而是可以查看查询的 rangetable。此更改意味着我们将打印查询别名(如果使用了的话),而不是表的实际名称或列的实际名称。但这似乎不是一件坏事:例如,在自连接的情况下,它肯定是一个更有用的定义。无论如何,应用程序似乎不太可能依赖于这个细节,所以更改它是安全的。补丁由我提交。最初由 Andres Freund 投诉;Bharath Rupireddy 注意到了与 conversion_error_callback 的联系。讨论:https://postgr.es/m/20210106020229.ne5xnuu6wlondjpe@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/c7b7311f6177b90fe5033b8ed2c10dfcbb863eb6

  • 降低计划深度嵌套视图的成本。Joel Jacobson 报告说,平凡(可展平)视图的深度嵌套会导致 N 深度嵌套的计划时间以 O(N^3) 的速度增长。事实证明,其中很大一部分成本来自复制每个视图的 RTE_SUBQUERY RTE 的“子查询”子树。但一旦我们成功地展平了子查询,我们就不再需要它了,因为规划器不会对该 RTE 做任何其他有趣的事情。我们已经在 setrefs.c 中(参见 add_rte_to_flat_rtable)删除了子查询指针,但在此之前它也是无用的包袱。一旦 pull_up_simple_subquery 完成了 RTE 的工作,就清除指针可以将成本从 O(N^3) 降低到 O(N^2);这仍然不理想,但要好得多。进一步的改进将需要重新考虑 RTE 数据结构,这将在另一个线程中进行考虑。补丁由我提交;感谢 Dean Rasheed 的审查。讨论:https://postgr.es/m/797aff54-b49b-4914-9ff9-aa42564a4d7d@www.fastmail.com https://git.postgresql.org/pg/commitdiff/64919aaab45076445051245c9bcd48dd84abebe7

  • 允许 CustomScan 提供者声明它们是否支持投影。以前,所有 CustomScan 提供者都必须支持投影,但这在某些情况下可能不方便。添加一个标志位来说明是否支持。发布说明中的重要项:这不向后兼容,因为默认值现在假定 CustomScan 提供者不能投影,而不是假定它们可以。这是一个可容错的更改,但由于添加了不必要的 Result 节点,可能会导致可见的性能下降。Sven Klemm 审阅,Aleksander Alekseev 审阅;我进行了一些小的调整。讨论:https://postgr.es/m/CAMCrgp1kyakOz6c8aKhNDJXjhQ1dEjEnp+6KNT3KxPrjNtsrDg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/955b3e0f9269639fb916cee3dea37aee50b82df0

  • 修复 postgres_fdw 中可证明为空的远程 UPDATE/DELETE 时的崩溃。在 86dc90056 中,我编写了 find_modifytable_subplan,假设如果 ModifyTable 的直接子项是 Result,则它必须是一个投影 Result 并且带有子计划。然而,如果 UPDATE 或 DELETE 有一个可证明为恒定的 WHERE 子句为 false,情况并非如此:我们将生成一个带有无子计划的虚拟子计划。添加缺失的空检查,以免在这种情况下崩溃。根据 Alexander Pyhalov 的报告。讨论:https://postgr.es/m/b9a6f53549456b2f3e2fd150dcd79d72@postgrespro.ru https://git.postgresql.org/pg/commitdiff/b9734c13f168ef0d487aa122e486ca9b6dd6aa59

  • 拒绝 WITH 查询重写为仅 NOTIFY 的情况。由于执行器无法处理作为计划树节点的实用语句,因此我们无法支持重写规则将 NOTIFY 插入到较大查询的 WITH 子句中出现的 INSERT/UPDATE/DELETE 命令中的情况。(可以想象出绕过的方法,但这将是新功能而不是错误修复,到目前为止还没有需求。)RewriteQuery 检查了这一点,但它错过了 DML 命令重写为 NOTIFY 的情况。这将在后续的计划阶段导致崩溃。添加了遗漏的检查,并改进了该区域的测试级别。根据 Yaoguang Chen 的 bug #17094。自 WITH 引入以来一直存在错误,因此回溯兼容至所有支持的分支。讨论:https://postgr.es/m/17094-bf15dff55eaf2e28@postgresql.org https://git.postgresql.org/pg/commitdiff/a9da1934e971b38ab360ce80a352fbfc4d2d986b

  • 更新 configure 中 libldap 的探测,以兼容 OpenLDAP 2.5。独立的 libldap_r 已被移除,libldap 本身现在总是线程安全的。不幸的是,似乎没有简单的方法通过检查来判断 libldap 是否线程安全,因此我们必须相信如果不存在 libldap_r,libldap 就是线程安全的。这应该没问题,因为 libldap_r 在至少 20 年前就是安装的标准部分。报告和补丁由 Adrian Ho 提交。回溯兼容至所有支持的分支,因为人们可能会尝试使用更新的 OpenLDAP 来构建任何版本。讨论:https://postgr.es/m/17083-a19190d9591946a7@postgresql.org https://git.postgresql.org/pg/commitdiff/d0a02bdb8c2576b5aa607f127320e444080bd579

  • 避免创建标记为 LATERAL 的 RESULT RTE。提交 7266d0997 添加了将简单常量函数结果拉入的代码,将 RTE_FUNCTION RTE 转换为虚拟 RTE_RESULT RTE,因为它不再需要扫描。但我忘了在 RTE 具有 LATERAL 标志时清除它。如果函数归结为常量,它肯定不包含横向引用,所以这种简化在逻辑上是 OK 的。这是必需的,因为其他各种地方会断言 RESULT RTE 不是 LATERAL。根据 Yaoguang Chen 的 bug #17097。回溯兼容至 v13,错误代码在此版本中引入。讨论:https://postgr.es/m/17097-3372ef9f798fc94f@postgresql.org https://git.postgresql.org/pg/commitdiff/d23ac62afa646b7073a7f0db0a137308459a263b

  • 修复 AIX 构建。在提交 d0a02bdb8 中,我曾认为统一探测 ldap_bind 会使意图更清晰。然而,这在 AIX 上似乎不起作用,原因不明(也许在那里它是一个宏?)。恢复到以前的行为,探测 ldap_simple_bind 来处理线程安全的情况,否则探测 ldap_bind。根据 buildfarm 成员 hoverfly 的报告。讨论:https://postgr.es/m/17083-a19190d9591946a7@postgresql.org https://git.postgresql.org/pg/commitdiff/31e8cfac5845fa57e1805f4ff81e00ab78dff025

  • 修复 AIX 构建,第二次。我错误地诊断了 hoverfly 不满意的原因。仔细查看,它似乎在链接 libldap 之前需要 libssl 存在;所以问题在于我清空 LIBS 然后进行检查的想法。恢复到与原始代码基本相同,除了当 libldap_r 不存在时不是失败,而是使用 libldap。根据 buildfarm 成员 hoverfly 的报告。讨论:https://postgr.es/m/17083-a19190d9591946a7@postgresql.org https://git.postgresql.org/pg/commitdiff/53c38a086a8001d63401671755638bc95c7fa1c7

  • 修复 ldap_initialize 的损坏测试。唉……我原以为 AC_CHECK_LIB 会做它没做的事,即更新 LIBS。这导致找不到 ldap_initialize。通过移动 ldap_initialize 的探测来修复。在某种意义上,这更正确,因为(至少目前)我们关心 ldap_initialize 是否存在于 libldap 而不是 libldap_r 中。根据 buildfarm 成员 elver 的报告和本地测试。讨论:https://postgr.es/m/17083-a19190d9591946a7@postgresql.org https://git.postgresql.org/pg/commitdiff/9f6be2e79f88c65cef7cfeb0580e8b2ba74974f6

  • 在 ALTER EXTENSION ADD/DROP 时锁定扩展。虽然我们小心地锁定了要添加或删除的对象,但我们未能获得对扩展本身的任何锁定。这允许 ALTER 与 DROP EXTENSION 并行进行,这由于几个原因而有问题。如果两个命令都成功,我们就会留下一个悬空的 pg_depend 链接,这将在稍后导致问题。此外,如果 ALTER 因某种原因失败,它可能会尝试打印扩展的名称,这可能导致崩溃或(在旧分支中)出现抱怨扩展“(null)”的愚蠢错误消息。根据 Alexander Lakhin 的 bug #17098。回溯兼容至所有支持的分支。讨论:https://postgr.es/m/17098-b960f3616c861f83@postgresql.org https://git.postgresql.org/pg/commitdiff/626731db26ae2617e41536678440c3817128a006

Michaël Paquier 提交

David Rowley 提交

  • 减少构建分区边界时的 palloc 调用次数。在 LIST、RANGE 和 HASH 分区的每个 `create_*_bound()` 函数中,都有大量的 palloc 调用,可以减少到少得多的次数。在这些函数中的每一个中,都构建了一个数组,以便在制作 PartitionBoundInfo 之前对其进行 qsort。对于 LIST 和 HASH 分区,会分配一个指针数组,然后在此数组中为每个元素分配内存。由于每个维度的项目数量是预先已知的,因此我们可以为此分配一个单独的内存块。类似地,对于所有分区策略,我们都可以将分配次数减少到构建 ->datums 字段。这是一个 Datum 指针数组,但每个元素指向的 Datum 不需要单独分配。一个大块就足够了。对于 RANGE 分区,PartitionBoundInfo->kind 字段可以得到相同的处理。我们可以将相同的优化应用于 partition_bounds_copy()。这样做可能会在分区修剪或对分区表进行 DML 时搜索正确分区的缓存性能方面产生微小影响。然而,这可能很小,而且这主要是为了减少 palloc 开销。作者:Nitin Jadhav, Justin Pryzby, David Rowley 审阅者:Justin Pryzby, Zhihong Yu 讨论:https://postgr.es/m/flat/CAMm1aWYFTqEio3bURzZh47jveiHRwgQTiSDvBORczNEz2duZ1Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/53d86957e980efa06f15232b8cff430d4cc6dd64

  • 修复注释中的拼写错误。作者:James Coleman 讨论:https://postgr.es/m/CAAaqYe8f8ENA0i1PdBtUNWDd2sxHSMgscNYbjhaXMuAdfBrZcg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/9ee91cc583802c6507fbc31c348a79e63a10f956

  • 使用哈希表加速 NOT IN(values)。与 50e17ad28(它允许对包含常量集的 IN 子句使用哈希表)类似,我们在这里为 NOT IN 子句添加了相同的功能。NOT IN 的计算方式与:WHERE a <> v1 AND a <> v2 AND a <> v3 相同。显然,如果我们使用哈希表,我们必须与该哈希表完全等效,并考虑到条件的任何一侧都可能包含 NULL,从而返回相同的结果。这需要一些特殊的处理才能与哈希表版本一起工作。在处理 NOT IN 时,ScalarArrayOpExpr 的运算符将是 <> 运算符。为了能够构建和查找哈希表,我们必须使用 <> 的否定运算符。规划器会检查它是否存在且可哈希,并设置 ScalarArrayOpExpr 中的相关字段以指示执行器使用哈希。作者:David Rowley, James Coleman 审阅者:James Coleman, Zhihong Yu 讨论:https://postgr.es/m/CAApHDvoF1mum_FRk6D621edcB6KSHBi2+GAgWmioj5AhOu2vwQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/29f45e299e7ffa1df0db44b8452228625479487f

  • 修复 pg_size_pretty(bigint) 中不正确的返回值。由于 pg_size_pretty(bigint) 的实现方式,当给定负字节数时,返回值可能不等于给定等效正字节数时的返回值。这是由于两个独立的问题:1. 该函数使用位移来将字节数转换为更大的单位。位移执行的舍入与除法不同。例如,-3 >> 1 = -2,但 -3 / 2 = -1。这两种操作仅对正数等效。2. half_rounded() 宏向正无穷大舍入。这意味着负数向零舍入,正数远离零舍入。这里我们通过除法而不是位移来修复 #1。我们通过调整 half_rounded 宏使其始终远离零舍入来修复 #2。此外,调整 pg_size_pretty(numeric) 函数,使其更明确地使用除法而不是位移。偶然的观察者可能会认为使用了位移,因为一个静态函数名为 numeric_shift_right。但是,该函数是从位数计算除数的,并执行了除法。在这里,我们使其更清楚。此更改仅是外观上的,不会影响 numeric 版本函数的返回值。在此,我们还为 pg_size_pretty() 的两个版本添加了一组回归测试,这些测试直接测试函数切换到下一个单位之前和之后的返回值。此错误是在 8a1fab36a 中引入的。在此之前,负值总是以字节显示。作者:Dean Rasheed, David Rowley 讨论:https://postgr.es/m/CAEZATCXnNW4HsmZnxhfezR5FuiGgp+mkY4AzcL5eRGO4fuadWg@mail.gmail.com 回溯兼容至:9.6,引入此错误的版本。 https://git.postgresql.org/pg/commitdiff/55fe609387685de1c754332e260b2d0e17d257dc

  • 在 pg_size_pretty 和 pg_size_bytes 中使用单位查找表。多年来,我们已经开发了 2 个版本的 pg_size_pretty,一个用于 BIGINT,一个用于 NUMERIC。两者都应该输出相同的结果,但保持同步比需要的更难,因为两个函数都没有共享关于应使用哪些单位以及如何过渡到下一个最大单位的真相来源。在这里,我们添加了一个静态数组,它定义了我们识别的单位,并让 pg_size_pretty 和 pg_size_pretty_numeric 都使用它。这将使将来添加任何单位的任务非常简单。该表包含所有必要的信息,也允许我们修改 pg_size_bytes 来使用查找表,因此也调整它。这里没有行为上的变化。作者:David Rowley 审阅者:Dean Rasheed, Tom Lane, David Christensen 讨论:https://postgr.es/m/CAApHDvru1F7qsEVL-iOHeezJ+5WVxXnyD_Jo9nht+Eh85ekK-Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/56ff8b29919f75a078969766393b9e20871a75c8

  • 让 pg_size_pretty 和 pg_size_bytes 认识 PB(拍字节)。之前有讨论过添加直到 YB(尧字节)的单位,但似乎没有人需要那些单位的可能性非常渺茫。由于这些大单位并不常见,因此 pg_size_pretty 输出比 PB 更大的单位似乎不太可能对任何人有帮助。由于 PB 就在眼前,我们只添加那些。也许有一天我们会添加其他单位,但现在在数据库大小方面,可能需要一段时间才能考虑 PB 以上的单位。作者:David Christensen 讨论:https://postgr.es/m/CAOxo6XKmHc_WZip-x5QwaOqFEiCq_SVD0B7sbTZQk+qqcn2qaw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ca2e4472ba7b6e5e8cd8955eacffb90e4d88d085

Álvaro Herrera 提交

Fujii Masao 提交

  • postgres_fdw:收紧 batch_size、fetch_size 选项允许的值。以前,值如 '100$%$#$#'、'9,223,372,' 被接受并被视为 postgres_fdw 选项 batch_size 和 fetch_size 的有效整数。而 fdw_startup_cost 和 fdw_tuple_cost 选项则不是这种情况,它们会引发错误。这是因为在使用 strtol 将字符串转换为整数时没有使用 endptr。此提交更改了逻辑,使其使用 parse_int 函数而不是 strtol,因为它通过在无法将字符串转换为整数时返回 false 来达到目的。请注意,此函数还将 '100.456' 之类的值四舍五入为 100,将 '100.567' 或 '100.678' 四舍五入为 101。在此期间,使用 parse_real 来处理 fdw_startup_cost 和 fdw_tuple_cost 选项。由于 parse_int 和 parse_real 已用于 reloptions 和 GUC,因此在 postgres_fdw 中使用它们比直接使用 strtol 和 strtod 更合适。回溯兼容至 v14。作者:Bharath Rupireddy 审阅者:Ashutosh Bapat, Tom Lane, Kyotaro Horiguchi, Fujii Masao 讨论:https://postgr.es/m/CALj2ACVMO6wY5Pc4oe1OCgUOAtdjHuFsBDw8R5uoYR86eWFQDA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/d854720df6df68cfe1432342e33c9e3020572a51

  • 文档:修复关于 pg_stat_statements.track_planning 的描述。此提交修复了关于 track_planning 选项的描述中的错误措辞,例如“a fewer kinds”(一种更少种类)。回溯兼容至 v13,即添加 pg_stat_statements.track_planning 的版本。作者:Justin Pryzby 审阅者:Julien Rouhaud, Fujii Masao 讨论:https://postgr.es/m/20210418233615.GB7256@telsasoft.com https://git.postgresql.org/pg/commitdiff/9d2a7757347cb1adb48599fce4dcde0f1fc9e9ae

Daniel Gustafsson 提交

Thomas Munro 推送

Jeff Davis 推送

待处理补丁

Jie Zhang 提交了一个补丁,使 libpq 的 PQsendFlushRequest 返回文档中指定的 0 而不是代码中的 false。

Gilles Darold 提交了另一个补丁修订版,添加了新的事件 XACT_EVENT_COMMAND_START 和 SUBXACT_EVENT_COMMAND_START,这些事件可以在 xact 回调中捕获到即将执行的新命令。

Ranier Vilela 提交了一个补丁,以修复 src/backend/utils/adt/varlena.c 中可能存在的未初始化变量声明。

Ronan Dunklau 和 Ranier Vilela 交换了补丁,允许 Sort 节点使用快速的“单数据”元组排序。

Andrey V. Lepikhov 提交了另外两个补丁修订版,用于教会优化器考虑非分区表的按分区连接(与分区表的每个分区),并禁止连接两个分区(或附加)关系的不对称机制,因为这可能导致 NestLoop 路径的重新参数化期间出现巨大的 CPU 和内存消耗。

Victor Spirin 提交了两个补丁修订版,使 Windows 上的重命名操作具有原子性。

Peter Smith 提交了一个补丁,增加了 psql 的 CREATE PUBLICATION 选项卡完成的细微差别。

Amit Langote 提交了另一个补丁修订版,用于导出 get_partition_for_tuple(),并使用它来避免对某些 RI 检查使用 SPI。

Hou Zhijie 提交了另一个补丁修订版,使表能够被注解为安全允许(或不允许)并行 DML,并使用此功能使 INSERT ... SELECT 中可以使用并行查询,并添加了一个 pg_get_table_parallel_dml_safety(regclass) 函数。

Dilip Kumar 提交了一个补丁,使 CREATE DATABASE 成为 WAL 日志记录操作,以避免因检查点和大量的写操作而导致先前实现带来的负担。

Zeng Wenjing 提交了一个补丁,用于更早地检查同步备用。

Vigneshwaran C 提交了另一个补丁修订版,用于在 CREATE/ALTER SUBSCRIPTION 期间识别发布者中丢失的订阅。

Dipesh Pandit 提交了一个补丁,通过维护正在归档的当前文件的日志段号并将其加 1 来获取下一个 WAL 文件,从而减轻 WAL 归档器中 O(N^2) 的目录扫描。

Justin Pryzby 提交了一个补丁,在 procarray.c 中添加了一些 ASSERTIONs,并向 pg_resetwal.c 添加了一个新的 oldest-transaction-id 可选参数。

Gilles Darold 提交了另外三个补丁修订版,为 PostgreSQL FDW 添加了 CASE 子句的下推。

Bharath Rupireddy 和 Peter Smith 交换了补丁,使 parse_subscription_options 函数负责提前清除 SubOpts 参数,而不是期望调用者这样做,并移除对“supported_opts”的冗余条件检查,因为我们已经知道该选项必须受支持。

Ajin Cherian, Amit Kapila 和 Peter Smith 交换了补丁,为逻辑复制添加了对预备事务的支持。

Vigneshwaran C 提交了另外两个补丁修订版,用于在出现重复选项错误时通过包含选项名称来增强错误消息。

Greg Nancarrow 提交了另一个补丁修订版,添加了一个新的“client_connection”事件以及相应的客户端连接触发器支持。

Gurjeet Singh 提交了一个补丁,明确指出 --sync-only 不会修改数据。

Kyotaro HORIGUCHI 提交了一个补丁,使 FPI_FOR_HINT 遵循标准的 FPI 发送策略。

David Rowley 提交了另一个补丁修订版,移除了 BIGINT 序列 MINVALUE/MAXVALUE 值上无用的 int64 范围检查。

Bharath Rupireddy 提交了另一个补丁修订版,通过更具体地说明无法将某个对象添加到发布中的原因来改进发布错误消息。

Andy Fan 提交了另一个补丁修订版,扩展了规划器中唯一性(uniqueness)的使用方式。

Gurjeet Singh 提交了一个补丁,当 initdb 的 --sync-only 选项与其他选项混合使用时发出警告。

Dean Rasheed 提交了另一个补丁修订版,修复了 NUMERIC 类型上指数运算中的精度损失错误并防止了一些溢出错误。

Bruce Momjian 提交了另外三个补丁修订版,修复了一个导致可见性图损坏的错误。

Dagfinn Ilmari Mannsåker 提交了一个补丁,在适当的情况下使用了 `l*_node()` 系列函数。

Li Japin 和 Ranier Vilela 交换了补丁,用于验证 parse_subscription_options 中的 slot_name。

Yugo Nagata 提交了另一个补丁修订版,用于避免某些 pgbench 错误。

Euler Taveira de Oliveira 和 Greg Nancarrow 交换了补丁,为逻辑复制实现了行过滤。

Takamichi Osumi 提交了一个补丁,修复了一个导致事务统计信息测量逻辑复制进度的错误。

Fabien COELHO 提交了另外两个补丁修订版,将 rand48 替换为更好的 PRNG。

Masahiko Sawada 提交了一个补丁,用于澄清 ALTER SUBSCRIPTION 关于 refresh_option 选项的文档。

Robert Haas 提交了另一个补丁修订版,重构了 basebackup.c。

Seino Yuki 提交了一个补丁,用于跟踪物化视图的统计信息。

Georgios Kokolatos 提交了另一个补丁修订版,用于让 pg_receivewal 支持 lz4 压缩。

Kyotaro HORIGUCHI 提交了两个补丁修订版,以便严格拒绝命令行中无效的数值参数,并对被假定为数值的环境变量发出抱怨。

Alexander Lakhin 和 Michaël Paquier 交换了补丁,以修复 pg_ls_dir。

Quan Zongliang 提交了四个补丁修订版,修复了一个当块大小为 32k 时,pageinspect 中的 page_header 函数返回负数的错误。

Bharath Rupireddy 提交了另一个补丁修订版,用于区分使用“非负”的错误消息。

Atsushi Torikoshi 提交了另一个补丁修订版,添加了一个函数,用于记录与指定进程 ID 正在后端运行的查询相关的、未截断的查询字符串及其计划。

Hou Zhijie 提交了另一个补丁修订版,为发布添加了模式级别的支持。

Bertrand Drouvot 提交了另一个补丁修订版,修复了一个导致逻辑解码关系重写(带 toast)未重置 toast_hash 的错误。

Georgios Kokolatos 提交了一个补丁,用于测试 pg_receivewal 中的 gzip 压缩。

Pavel Borisov 提交了另一个补丁修订版,通过 LIST 和 HASH 自动生成分区。

Amul Sul 提交了另一个补丁修订版,添加了一个 RelationGetSmgr 内联函数。

David Rowley 提交了另一个补丁修订版,用于在 RelOptInfo 中跟踪未修剪的分区,并在更多情况下允许有序分区扫描。

Dagfinn Ilmari Mannsåker 提交了一个补丁,为 psql 的 CREATE SCHEMA 添加了选项卡完成。

Zhihong Yu 提交了一个补丁,缩短了 find_hash_columns() 中对必需列的测试。

Nathan Bossart 提交了另一个补丁修订版,用于预分配 WAL 段。

Tomáš Vondra 提交了另一个补丁修订版,使 pg_dump 能够单独转储函数。

Peifeng Qiu 提交了一个补丁,为 postgres_fdw 添加了对 Kerberos 身份验证的支持。

Erik Rijkers 提交了一个补丁,将 JSON 操作作为 JIT 编译的候选。

Fabien COELHO 提交了另一个补丁修订版,用于提取 psql 中的 echo 代码。

David Rowley 提交了一个补丁,将 Result 缓存节点重命名为 Memoize。

Soumyadeep Chakraborty 提交了另一个补丁修订版,用于在 pg_stats 中显示长度和边界直方图。

Ranier Vilela 提交了一个补丁,通过检查数组项的最大限制来防止 src/backend/access/nbtree/nbtxlog.c 中可能的内存损坏。

Thomas Munro 提交了另一个补丁修订版,为 psql 的 \watch 命令添加了一个 PSQL_WATCH_PAGER 设置。