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

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

发布于 2021-02-15,作者 PWN
PWN

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

安全版本 13.2、12.6、11.11、10.16、9.6.21 和 9.5.25 已发布。请尽快升级。9.2.25 是 PostgreSQL 9.5 的最后一个版本。https://postgresql.ac.cn/about/news/postgresql-132-126-1111-1016-9621-and-9525-released-2165/

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

PostgreSQL 产品新闻

check_pgbackrest 2.0 发布,这是一个兼容 Nagios 的 pgBackRest 监控工具。https://github.com/dalibo/check_pgbackrest/releases

AGE 0.3.0 发布,这是一个提供图数据库功能的 PostgreSQL 扩展。https://github.com/apache/incubator-age/releases/tag/v0.3.0.rc0-incubating

二月 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。

已应用补丁

Heikki Linnakangas 提交

  • 修复分区上的约束冲突错误时的权限检查。如果跨分区 UPDATE 违反目标分区的约束,并且新分区中的列的物理顺序与父级不同,错误消息可能会泄露用户没有 SELECT 权限的列。提交 804b6b6db4 早期修复了类似的错误。该错误的根本原因是 ExecBuildSlotValueDescription() 函数的调用者在构造修改的列列表时感到困惑。如果元组来自父级,我们将其转换为父级的格式,但修改的列列表直接从子级的 RTE 条目中获取。ExecUpdateLockMode() 也有类似问题。这导致了对哪些列是键列的困惑,从而在 INSERT ON CONFLICT UPDATE 更新行时,在被外键引用的表上获取错误的元组锁。为此类极端情况添加了一个新的隔离测试。使用此补丁,对于不在范围表中的分区,ri_RangeTableIndex 不再设置。以前,它被设置为父关系的 RTE 条目,但这令人困惑。注意:这会修改 ResultRelInfo 结构,用 ri_RootResultRelInfo 替换 ri_PartitionRoot 字段。这在回溯补丁时有些危险,因为它会破坏任何访问该字段的扩展。ri_RangeTableIndex 未为分区设置的更改也可能破坏扩展。ResultRelInfos 至少对 FDW 可见,并且此补丁需要对 postgres_fdw 进行小的更改。但这似乎是“不那么糟糕”的选项。我不认为这些字段在扩展中被广泛使用;我认为除了 postgres_fdw 之外,没有 FDW 使用“直接更新”API。如果存在,您将收到编译错误,因此希望能够尽快捕获。回溯到 11 版本,当时添加了对跨分区 UPDATE 和分区表唯一索引的支持。Reviewed-by: Amit Langote Security: CVE-2021-3393 https://git.postgresql.org/pg/commitdiff/6214e2b2280462cbc3aa1986e350e167651b3905

Tom Lane 提交

  • 修复连接别名中列级别的 SELECT 权限处理不当的问题。scanNSItemForColumn、expandNSItemAttrs 和 ExpandSingleTable 在处理连接 ParseNamespaceItem 时会传递错误的 RTE 给 markVarForSelectPriv:它们会传递连接的 RTE,而我们需要标记的是连接列来自的基本表。最终结果是未能正确填充基表的 selectedCols 位图,导致查询读取的列集被低估。执行器仍然会坚持至少有一个可选择的列;但通过精心构造的查询,即使拥有该表某个列 SELECT 权限的用户仍然可以读取其所有列。为了修复这个问题,使 markRTEForSelectPriv 能够自行获取正确的 RTE,忽略调用者可能传递的不匹配的 RTE。稍后,我们将移除一些现在未使用的 RTE 参数,但这有 API 损坏的风险,因此不会在已发布的版本中进行。此问题由提交 9ce77d75c 引入,因此回溯到该提交引入的 v13 版本。感谢 Sven Klemm 报告此问题。Security: CVE-2021-20229 https://git.postgresql.org/pg/commitdiff/c028faf2a62ce476c8d689a33b12471dc98b80f2

  • 移除 markVarForSelectPriv() 中不再使用的 RTE 参数。在 c028faf2a 之后,这不再是必需的。我在该补丁中将其排除,因为 API 更改对于已发布的版本来说是不希望的;但在 HEAD 中这样做没有问题。https://git.postgresql.org/pg/commitdiff/d4c746516b8b4eb0bf993e3729ccc04d1febdb1e

  • 通过使用 strtoint() 而不是 strtol() 来简化 jsonfuncs.c 代码。明确测试 INT_MIN 和 INT_MAX 不是一个好习惯;它很繁琐,并且在 int 和 long 宽度相同的机器上可能会引起不必要的编译器警告。我们发明 strtoint() 正是为了这种用法,所以改用它。同时,移除 did-strtoint-succeed 测试拼写上的不必要的变体。另外,避免尝试对 INT_MIN 取负;这可能会起作用,因为结果会被隐式转换为 uint32,但我认为它名义上是未定义行为。根据 Ranier Vilela 的抱怨,尽管这不是他提出的补丁。讨论:https://postgr.es/m/CAEudQAqge3QfzoBRhe59QrB_5g+NmQUj2QpzqZ9Nc7QepXGAEw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/69036aafb9a8f425fb489125b5075ba7719d20d0

  • 移除 ECPGconnect() 中不再使用的代码,并改进文档。ECPGconnect() 中用于替换端口指定 Unix 套接字目录路径的语句块,自近二十年前提交以来从未执行过;前面的 strrchr() 已经找到了最后一个冒号,所以不可能有另一个。没有人抱怨这可能与用户界面文档没有暗示其可能性有关。与其尝试修复,不如删除不可达的代码,而是记录指定套接字目录路径的有效方法,即将其指定为“host”选项。为了支持这一点,再次阐明 ECPG 连接目标的语法文档,特别是记录哪些内容被解析为标识符以及何处使用双引号。重新组织一些看起来顺序不当的内容,并修复几个小的文档错误。Kyotaro Horiguchi,根据 Shenhao Wang 的抱怨(文档更改主要由我完成)讨论:https://postgr.es/m/ae52a416bbbf459c96bab30b3038e06c@G08CNEXMBPEKD06.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/62535cae9723afc48173ba1be65f1c7491813fc2

  • 避免在 regex_selectivity() 中出现带有长固定前缀的除零错误。给定一个具有非常长的固定前缀(接近 500 个字符)的正则表达式模式,pow(FIXED_CHAR_SEL, fixed_prefix_len) 的结果可能会下溢为零。通常,前面的选择性计算也会下溢,因此我们计算 0/0 并得到 NaN。在已发布的版本中,这会导致稍后断言失败。在 HEAD 中不会发生这种情况,原因我尚未探索,但这肯定仍然是一个错误。为了修复,当 pow() 结果为零时,仅跳过除法,这样我们(很可能)会返回一个零选择性估计。在“sel”尚未下溢的极端情况下,这可能不是期望的,但我不知道这个情况是否值得花费大量精力。regex_selectivity_sub() 的结果几乎不值它们所消耗的电子 :-)。根据 Alexander Lakhin 的报告。回溯到所有支持的版本。讨论:https://postgr.es/m/6de0a0c3-ada9-cd0c-3e4e-2fa9964b41e3@gmail.com https://git.postgresql.org/pg/commitdiff/ae4867ec749671dadb5eb49a1158ded9b8ca0b29

  • 调整 no_sanitize("alignment") 支持的编译器版本截止点。Buildfarm 的结果表明,gcc 7.x 及以下版本在此构造中会产生烦人的警告(并且,大概率也不会做正确的事情)。clang 似乎与我们目前的截止点没问题。讨论:https://postgr.es/m/CAPpHfdsne3%3DT%3DfMNU45PtxdhSL_J2PjLTeS8rwKnJzUR4YNd4w%40mail.gmail.com 讨论:https://postgr.es/m/475514.1612745257%40sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/ad2ad698ac16f36a9784bc98f312cf5b5266c6aa

Peter Geoghegan 提交

  • 更正 pgstattuple B-Tree 页注释。https://git.postgresql.org/pg/commitdiff/5fd590021d268190e4c8f377370c7e7f1e7d9229

  • 修复 nbtree README 中过时的 FSM 备注。空闲空间映射使用专用的关系分支而不是共享内存段已经十多年了。https://git.postgresql.org/pg/commitdiff/31c7fb41e26bf03dae231c7165a1a16388b2e366

  • 移除不再使用的 IndexBulkDeleteResult 统计字段。pages_removed 字段已不再使用。自从提交 0a469c87 移除旧式 VACUUM FULL 后,索引就不可能在物理上缩小了。https://git.postgresql.org/pg/commitdiff/3063eb17593c3ad498ce4e89db3358862ea2dbb6

Michaël Paquier 提交

  • 为 VACUUM 添加 PROCESS_TOAST 选项。此选项控制在手动 VACUUM 时是否对关联到关系的 toast 表进行 vacuum。尽管已经可以触发 toast 关系的手动 vacuum 而不处理主关系,但手动 vacuum 主关系总是会强制 vacuum 其 toast 表。这在主关系和 toast 关系的膨胀或事务年龄差异很大的情况下很有用。此选项是对现有 VACOPT_SKIPTOAST 的扩展,autovacuum 使用它来控制是否跳过 toast 关系。为了与新选项保持一致,此内部标志被重命名为 VACOPT_PROCESS_TOAST。vacuumdb 中添加了一个名为 --no-process-toast 的新选项开关。作者:Nathan Bossart Reviewed-by: Kirk Jamison, Michael Paquier, Justin Pryzby 讨论:https://postgr.es/m/BA8951E9-1524-48C5-94AF-73B1F0D7857F@amazon.com https://git.postgresql.org/pg/commitdiff/7cb3048f38e26b39dd5fd412ed8a4981b6809b35

  • 在 REINDEX CONCURRENTLY 之间保留 pg_attribute.attstattarget。对于索引,可以使用 ALTER INDEX SET STATISTICS 更新 attstattarget。在 REINDEX CONCURRENTLY 之后,这个数据在新索引上会丢失。通过在新旧索引交换时更新此字段,可以使其可回溯补丁。长期来看,我们还可以考虑另一种方法,即更改 index_create(),使其在创建新关系时传递 attstattarget 的所需值,但由于这会导致 ABI 损坏,因此只能在 HEAD 版本中进行。Reported-by: Ronan Dunklau Author: Michael Paquier Reviewed-by: Ronan Dunklau, Tomas Vondra 讨论:https://postgr.es/m/16628084.uLZWGnKmhe@laptop-ronand Backpatch-through: 12 https://git.postgresql.org/pg/commitdiff/bd12080980297dbc8ae926a3bd5b2ef9cc47932b

  • 简化与 SSL 和 OpenSSL 编译相关的代码。此提交使与 OpenSSL 和 SSL 编译相关的注释和代码更加通用,以便将来更容易添加更多的 SSL 实现。在 libpq 中,一些仅限 OpenSSL 的代码被移到 USE_OPENSSL 下,而不是 USE_SSL。同时,使 libpq-fe.h 中的注释更加一致。作者:Daniel Gustafsson 讨论:https://postgr.es/m/5382CB4A-9CF3-4145-BA46-C802615935E0@yesql.se https://git.postgresql.org/pg/commitdiff/092b785fad3de3f81355a4b2420aa39a1bc0ccd5

  • 修复 REINDEX CONCURRENTLY 新回归测试中的 ORDER BY 子句。bd12080 中的疏忽。Reported-by: Justin Pryzby 讨论:https://postgr.es/m/20210210065805.GG20012@telsasoft.com Backpatch-through: 12 https://git.postgresql.org/pg/commitdiff/4f4726005082c07c004506a1ddfca29896375206

  • 修复 checksum_helper.c 中 SHA256 摘要长度的复制粘贴错误。该问题由 87ae969 引入,在处理该区域时发现。同时,修复周围静态断言中的一些语法错误。https://git.postgresql.org/pg/commitdiff/42d74e0c443760af91875af99d2655c9eb4c40df

  • doc:在支持的 ALTER 命令中提及 NO DEPENDS ON EXTENSION。此语法风格已由 5fc7039 添加。作者:Ian Lawrence Barwick 讨论:https://postgr.es/m/CAB8KJ=ii6JScodxkA6-DO8bjatsMYU3OcewnL0mdN9geR+tTaw@mail.gmail.com Backpatch-through: 13 https://git.postgresql.org/pg/commitdiff/8063d0f6f56e53edd991f53aadc8cb7f8d3fdd8f

Fujii Masao 提交

  • 在 pg_locks 中显示进程开始等待锁的时间。此提交向 pg_locks 视图添加了新列 "waitstart"。如果锁未被持有,此列报告服务器进程开始等待锁的时间。此信息非常有用,例如,可以通过从 pg_locks 中的“waitstart”减去当前时间来检查等待锁的时间量,并识别进程正在等待的锁。此功能使用为死锁超时计时器获得的当前时间作为“waitstart”(即,此进程开始等待锁的时间)。由于新获取当前时间可能会产生开销,因此我们重用已获取的时间以避免此开销。请注意,“waitstart”在不持有锁表分区锁的情况下更新,以避免额外的锁获取开销。这可能导致“waitstart”在等待开始后的一小段时间内为 NULL,即使“granted”为 false。在实践中这是可以接受的,因为我们可以假设用户可能更关注长时间的等待。更新 catalog 版本。作者:Atsushi Torikoshi Reviewed-by: Ian Lawrence Barwick, Robert Haas, Justin Pryzby, Fujii Masao 讨论:https://postgr.es/m/a96013dc51cdc56b2a2b84fa8a16a993@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/3b733fcd04195399db56f73f0616b4f5c6828e18

  • 撤销“在 pg_locks 中显示进程开始等待锁的时间”。此提交撤销了 commit 3b733fcd04195399db56f73f0616b4f5c6828e18。根据 buildfarm 成员 prion 和 rorqual 的报告。https://git.postgresql.org/pg/commitdiff/890d2182a2c425aaa80f9bf9f7116d31e0c6538e

Amit Kapila 提交

  • 使 pg_replication_origin_drop 对并发删除安全。目前,我们通过名称获取 origin id,然后通过对 ReplicationOriginRelationId 加 ExclusiveLock 来删除 origin。因此,两个并发会话可以同时从名称获取 id,然后当它们尝试删除 origin 时,其中一个会话会得到“元组被并发删除”或“找不到复制 origin .. 的缓存查找”的错误。为了防止这种竞争条件,我们将整个操作锁定。这使得 replorigin_drop() API 不再需要,并且我们已经删除了它,因此任何扩展作者如果正在使用它,则需要改用 replorigin_drop_by_name。请参阅其在 pg_replication_origin_drop() 中的用法。作者:Peter Smith Reviewed-by: Amit Kapila, Euler Taveira, Petr Jelinek, and Alvaro Herrera 讨论:https://postgresql.ac.cn/message-id/CAHut%2BPuW8DWV5fskkMWWMqzt-x7RPcNQOtJQBp6SdwyRghCk7A%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/cd142e032ebd50ec7974b3633269477c2c72f1cc

  • 允许在逻辑复制的表同步期间使用多个事务。对于逻辑复制中的初始表数据同步,我们使用单个事务来复制整个表,然后将流中的位置与主应用工作进程同步。这种方法有几个缺点:(a)如果在同步 WAL 位置期间出现任何错误(网络中断、数据库操作错误等),我们将不得不重新执行整个复制操作;这对于大型复制来说将非常繁重,(b)在同步阶段(可以从多个事务接收 WAL)使用单个事务将有超出 CID 限制的风险,(c)由于我们从未提交直到结束,因此槽将一直持有 WAL 直到整个同步完成。此补丁通过在表同步阶段允许多个事务来解决上述所有缺点。初始复制在一个事务中完成,之后,我们在接收到每个事务时进行提交。为了允许在任何错误或崩溃后恢复,我们使用永久槽和 origin 来跟踪进度。一旦表同步完成,槽和 origin 将被删除。如果我们执行 DROP SUBSCRIPTION .. 或 ALTER SUBSCRIPTION .. REFRESH,并且一些表同步尚未完成,我们还将删除 tablesync 工作进程的槽和 origin。由于它们可以删除我们没有回滚机制的槽,因此命令 ALTER SUBSCRIPTION ... REFRESH PUBLICATION 和 ALTER SUBSCRIPTION ... SET PUBLICATION ...(带 refresh 选项为 true)不能在事务块内执行。这还将为在订阅者端进行逻辑复制 2PC 事务开辟道路。以前,由于 tablesync 工作进程需要保持单个事务,我们无法做到这一点。由于 catalog(pg_subscription_rel)中的状态发生变化,catalog 版本增加。作者:Peter Smith, Amit Kapila, and Takamichi Osumi Reviewed-by: Ajin Cherian, Petr Jelinek, Hou Zhijie and Amit Kapila 讨论:https://postgr.es/m/CAA4eK1KHJxaZS-fod-0fey=0tq3=Gkn4ho=8N4-5HWiCfu0H1A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ce0fdbfe9722867b7fad4d3ede9b6a6bfc51fb4e

  • 修复 ce0fdbfe97 添加的 Subscription 测试。我们想测试 Alter Subscription 的变体,这些变体不允许在事务块内执行,但为此,我们不需要创建一个尝试连接到发布者的订阅。因此,这个测试没有问题,但最好允许这类测试在 wal_level = minimal 和 max_wal_senders = 0 下运行,以使其与其他测试保持一致。Buildfarm 报告。作者:Amit Kapila Reviewed-by: Ajin Cherian 讨论:https://postgr.es/m/CAA4eK1Lw0V+e1JPGHDq=+hVACv=14H8sR+2eJ1k3PEgwKmU-jQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c8b21b0378141948a2dc0ddde6f57407321787ea

Peter Eisentraut 提交

  • 修复消息复数形式缺失的问题。https://git.postgresql.org/pg/commitdiff/4ad5611055c8381d6a9b54fc11838418a1f14bc9

  • pg_dump:添加 const 修饰符。向 dump 函数的 *info 参数添加 const 修饰符,以明确它们不会修改该参数。许多其他附近的函数会修改它们的参数,因此这有助于阐明这些不同的 API。讨论:https://postgresql.ac.cn/message-id/flat/012d3030-9a2c-99a1-ed2d-988978b5632f%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/64990081504661ff5c04dbf20cc4252be66ab149

  • 为 abbrev(cidr) 添加测试用例。这将特别为 inet_cidr_ntop.c 添加良好的测试覆盖率,而该文件以前完全没有覆盖。Reviewed-by: Tom Lane tgl@sss.pgh.pa.us 讨论:https://postgresql.ac.cn/message-id/flat/cb0c4662-4596-dab4-7f64-839c5e8582c8%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/69273c8f88d7e6295ed7b38114969fa3ea03eff2

Magnus Hagander 已推送

  • 移除 initdb 末尾多余的 Success 消息。这在 e09155bd62 中被意外包含,并且与它上面的几行重复。Reported-By: Peter Eisentraut 讨论:https://postgr.es/m/455845d1-441d-cc40-d2a7-b47f4e422489@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/e7f42914854926c2afbb89b9cd0e381fd90766be

Alexander Korotkov 提交了

  • pg_attribute_no_sanitize_alignment() 宏。现代 gcc 和 clang 编译器提供了 alignment sanitizers,这有助于检测指针未对齐。然而,我们的代码库已经包含 x86 特定的 crc32 计算代码,它使用未对齐的访问。幸运的是,这些编译器也支持该属性,该属性可以在函数级别禁用 alignment sanitizers。此提交添加了 pg_attribute_no_sanitize_alignment(),它包装了此属性,并将其应用于 pg_comp_crc32c_sse42() 函数。讨论:https://postgr.es/m/CAPpHfdsne3%3DT%3DfMNU45PtxdhSL_J2PjLTeS8rwKnJzUR4YNd4w%40mail.gmail.com 讨论:https://postgr.es/m/475514.1612745257%40sss.pgh.pa.us Author: Alexander Korotkov, revised by Tom Lane Reviewed-by: Tom Lane https://git.postgresql.org/pg/commitdiff/993bdb9f935a751935a03c80d30857150ba2b645

Bruce Momjian 已推送

  • README/C-comment:记录 GiST 的 NSN 值。https://git.postgresql.org/pg/commitdiff/8facf1ea00b7a0c08c755a0392212b83e04ae28a

待处理补丁

Tang Haiying 发送了另一份补丁修订,以支持在 psql 中使用 set/reset/show 时对大写输入进行制表符补全。

Pavel Borisov 发送了三份补丁修订,使 amcheck 能够检查 btree 索引的 UNIQUE 约束。

Vigneshwaran C 发送了另外三份补丁修订,使 libpq 连接参数 "target_session_attrs" 支持新值:read-only, primary, standby, 和 prefer-standby。

Iwata Aya 发送了另外两份补丁修订,为 libpq 添加了跟踪。

Amit Langote, Greg Nancarrow, 和 Hou Zhijie 进行了补丁交换,以实现 INSERT ... SELECT 的并行执行。

Scott Mead 发送了另一份补丁修订,使 autovacuum 能够动态降低 cost_limit 和 cost_delay。

Matthias van de Meent 和 Josef Šimánek 进行了补丁交换,以增强 COPY 进度报告。

Heikki Linnakangas 和 John Naylor 进行了补丁交换,以使用 SIMD 指令加速 utf-8 检查。

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

Amit Langote 发送了另一份补丁修订,以设置 ForeignScanState.resultRelInfo 并惰性初始化结果关系信息。

Peter Eisentraut 发送了一个补丁,添加了常规用途信息模式表。

Heikki Linnakangas 发送了另一份补丁修订,向编码转换函数添加了一个 'noError' 参数,并使用它来分块处理 COPY FROM 的编码转换/验证。

Alexey Bashtanov 发送了一个补丁,添加了一个 bit_xor 聚合函数。

Daniel Gustafsson 发送了另一份补丁修订,使 libpq 的 TLS 实现可以使用 NSS。

Jacob Champion 发送了另外两份补丁修订,以记录所有认证后端已认证的身份。

Kyotaro HORIGUCHI 和 Dilip Kumar 进行了补丁交换,提供了一个新的接口来获取恢复暂停状态。

Tom Lane 发送了一个补丁,禁止在自定义 GUC 名称中使用一些容易出错的字符。

Nathan Bossart 发送了一个补丁,通过更仔细地仅更新实际更改了索引值的索引,来扩大堆内元组 (HOT) 优化的范围。在此之前,HOT 只能用于完全未索引的列,因为替代方案是更新所有索引,而不管其中是否有任何内容发生变化。

Peter Geoghegan 发送了三份补丁修订,在删除的 nbtree 页中使用 64 位 XID,并向 VACUUM VERBOSE 添加 pages_newly_deleted。

Takayuki Tsunakawa 发送了另一份补丁修订,以在目标表有远程分区时加速 COPY FROM。

Justin Pryzby 发送了另一份补丁修订,使 CLUSTER 能够在分区表上工作。

Stephen Frost 发送了另一份补丁修订,当 track_io_timing 启用时,将 I/O 时间包含在 autovacuum 和 autoanalyze 的日志中,并为 autoanalyze 添加了读取速率和脏速率。

Peter Smith 发送了两份补丁修订,实现了两阶段事务的逻辑解码。

Andy Fan 发送了一个补丁,在 RelOptInfo 中引入 notnullattrs 字段,以指示当前查询中哪些属性不是 null。

Etsuro Fujita 发送了两份补丁修订,在 PostgreSQL FDW 节点上实现了同步追加。

Ranier Vilela 和 Michaël Paquier 进行了补丁交换,通过向 pg_cryptohash_final 添加长度参数来修复其中可能出现的越界访问。

Dilip Kumar, Robert Haas, 和 Justin Pryzby 进行了补丁交换,为表添加了自定义压缩方法。

Michail Nikolaev 发送了另一份补丁修订,为备用节点增加了对 index LP_DEAD 提示位的完整支持。

Justin Pryzby 发送了一个补丁,修饰了 14 版本的文档。

Peter Eisentraut 发送了另一份补丁修订,为 SQL 函数实现了 SQL 标准函数体。

Peter Eisentraut 发送了一个补丁,为 bytea LIKE 操作符添加了测试。

Fujii Masao 发送了一个补丁,旨在修复一个表现为 ERROR: invalid spinlock number: 0 的错误,方法是将 written_lsn 的赋值移到一个可以更好地使用 pg_atomic_read_u64(&WalRcv->writtenUpto) 的地方。

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

Anastasia Lubennikova 发送了另一份补丁修订,旨在修复 pg_upgrade 在遇到非标准 ACL 时失败的错误。

Melanie Plageman 发送了另一份补丁修订,更新了并行哈希连接的注释和阶段命名。

Noah Misch 发送了两份补丁修订,转储 public schema 的所有权和安全标签,并转储 COMMENT ON SCHEMA public。

Zhihong Yu 和 Ranier Vilela 进行了补丁交换,修复了 src/backend/replication/logical/reorderbuffer.c 中可能出现的 null 解引用返回。

Tom Lane 发送了两个补丁修订,为正则表达式发明了彩虹弧,并在匹配像 "."".*" 或其变体的子 NFA 时,短路逐字符扫描,即它会匹配任意数量的字符序列。

Thomas Munro 发送了一个补丁,尝试在 WAL 记录之间保留缓冲区,如果成功,这将分摊查找、固定、锁定、解锁和取消固定这些缓冲区的成本,跨多个执行。

Erik Rijkers 和 Amit Kapila 进行了补丁交换,修复了逻辑复制最近出现的故障。

Bharath Rupireddy 发送了一个补丁,移除了 MakeTupleTableSlot 在 MakeSingleTupleTableSlot 中的不必要包装。

Li Japin 提交了另一版补丁,用于实现 ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION。

Noah Misch 发送了一个补丁,为 public schema 添加了默认 ACL。