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

PostgreSQL 周报 - 2020年11月29日

发布于 2020-11-30 by PWN
PWN

PostgreSQL 周报 - 2020年11月29日

PostgreSQL 产品新闻

Pgpool-II 4.2.0 发布,这是一个用于 PostgreSQL 的连接池和语句复制系统。 https://www.pgpool.net/docs/42/en/html/release-4-2-0.html

pgBadger v11.4 发布,这是一个用 Perl 编写的 PostgreSQL 日志分析和图形工具。 https://github.com/darold/pgbadger/releases

Database Lab 2.0 发布,这是一个用于快速克隆大型 PostgreSQL 数据库以构建非生产环境的工具: https://postgres.ai/blog/dle-2.0-release/

pgagroal 1.0.0 发布,这是一个高性能的原生协议连接池,用于 PostgreSQL。 https://agroal.github.io/pgagroal/release/announcement/2020/11/24/pgagroal-1.0.0.html

11月 PostgreSQL 工作机会

http://archives.postgresql.org/pgsql-jobs/2020-11/

PostgreSQL 相关新闻

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

本周 PostgreSQL 周报由 David Fetter 提供。

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

已应用补丁

Tom Lane 提交

  • 允许多行 INSERT 指定生成列的 DEFAULT 值。之前可以指定 "INSERT INTO tab(generated_col) VALUES (DEFAULT)" 而不报错。但多行 VALUES 列表的等效情况即使正确指定了每行的 DEFAULT 也会报错。修复了这个问题。同时,改进了与 OVERRIDING SYSTEM/USER 值相关的附近逻辑的测试用例。Dean Rasheed 讨论: https://postgr.es/m/9q0sgcr416t.fsf@gmx.us https://git.postgresql.org/pg/commitdiff/17958972fe3bb03454a4b53756b29d65dc285efa

  • 改进了两个与生成列相关的错误消息的措辞。澄清了只要插入的是 DEFAULT 占位符,就可以“插入”到生成列。此外,使用 ERRCODE_GENERATED_ALWAYS 替换 ERRCODE_SYNTAX_ERROR;似乎没有理由使用不太具体的 errcode。讨论: https://postgr.es/m/9q0sgcr416t.fsf@gmx.us https://git.postgresql.org/pg/commitdiff/d36228a9fcdccd57a7dc332572eb9837c7c301e6

  • 重命名“点严格在点之上/之下”的比较运算符。历史上,这些运算符被称为 >^ 和 <^,但这与 box、polygon 和 circle 运算符(分别命名为 |>> 和 <<|)不一致。更糟糕的是,>^ 和 <^ 名称用于 box 类型的严格上下测试。因此,发明了遵循更常见命名的新运算符。旧运算符目前仍然可用,并且相关的索引 opclass 也仍然接受它们。但有弃用通知,所以也许有一天我们可以去掉它们。Emre Hasegeli,Pavel Borisov 审阅 讨论: https://postgr.es/m/24348.1587444160@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/0cc99327888840f2bf572303b68438e4caf62de9

  • 移除不必要的 #include。Justin Pryzby 讨论: https://postgr.es/m/20201123205505.GJ24052@telsasoft.com https://git.postgresql.org/pg/commitdiff/3b9b01f75d6e2d7bf9e0bf8ec958ce420aa037c2

  • 集中处理跳过无用的 ereport/elog 调用逻辑。虽然 ereport() 和 elog() 本身在错误消息级别太低以至于无法打印时成本很低,但有些地方需要在调用这些宏之前做大量工作。为了允许在不打印任何内容时优化掉这些设置工作,让 elog.c 导出一个新函数 message_level_is_interesting(elevel),该函数报告 ereport/elog 是否会执行任何操作。在需要的地方使用它,这些地方之前有 ad-hoc 直接测试 log_min_messages 等。还教会 ProcSleep 使用它来避免一些工作。(可能还有其他地方可以有用地使用它;我没有仔细搜索。)在 elog.c 中,进行一些重构,以避免重复的策略设置逻辑。编写该代码时,我们并未依赖内联函数;因此,为了效率,它有一些重复,我已经将其删除。Alvaro Herrera 和 Tom Lane 讨论: https://postgr.es/m/129515.1606166429@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/789b938bf2b8e38d0894261eae6bc84bbbb4714e

  • 为内联函数声明添加“inline”标记。我很难确定 C 标准的文字是否要求这样做,但我们确实有几个 buildfarm 成员在未这样做时会发出警告。c532d15dd 中的疏忽。 https://git.postgresql.org/pg/commitdiff/ec05bafdbbf474bf0a1416772da31f9f1f27fa1e

  • 避免向客户端发送大量 ParameterStatus 消息。到目前为止,我们会在任何 GUC_REPORT 变量的活动值发生变化时立即向客户端发送一条 ParameterStatus 消息。这在功能设计时勉强可以接受;现在我们有了函数 SET 子句等,出现了一个非常合理的用例,即一个 GUC_REPORT 变量在单个查询中可能会改变多次——甚至可能回到其原始值。幸运的是,我们的大多数 GUC_REPORT 变量不太可能经常更改;但有一些提议正在进行中,以扩大该集合,甚至使其可由用户配置。因此,让我们修复问题,使其每个变量每个查询最多生成一条 ParameterStatus 消息,并且仅在查询结束值与我们上次报告的值不同时才发送任何消息。讨论: https://postgr.es/m/5708.1601145259@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/2432b1a04087edc2fd9536c7c9aa4ca03fd1b363

  • 文档:对第 11.2 节“索引类型”进行小改进。将每个索引类型的讨论分成 <sect2>,使其在视觉上更分开且更易于查找。改进标记,并对措辞进行一些小的调整。这也修复了一个指向现已弃用的 point 运算符 <^ 和 >^ 的无关引用。Dagfinn Ilmari Mannsåker,David Johnston 和 Jürgen Purtz 审阅 讨论: https://postgr.es/m/877dukhvzg.fsf@wibble.ilmari.org https://git.postgresql.org/pg/commitdiff/85b4ba73423b480902206ca04330c1cbea371c3c

  • 在 psql 的 \d 命令中,不要截断属性默认值。历史上,psql 会将列的默认表达式文本截断为 128 个字符。这与其他 describe.c 中的行为都不一样,而且现在只应用于表达式本身,而不应用于可能围绕它的“generated always as (...) stored”文本,这变得特别令人困惑。对我们的 git 历史的挖掘表明,最初限制的动机并不是真正限制显示宽度(我长期以来一直以为是这样),而是为了安全地使用固定宽度的输出缓冲区来存储结果。当然,那个实现限制早已消失,但限制仍然存在。让我们把它去掉。同时,重新排列关于何时释放输出字符串的逻辑,使其不再依赖于对 attidentity 和 attgenerated 可能值的未声明假设。根据 David Turon 的 bug #16743。向 v12(GENERATED 引入的版本)回溯。(可以说我们可以更早地回溯,但我犹豫要更改长期稳定的分支的行为。)讨论: https://postgr.es/m/16743-7b1bacc4af76e7ad@postgresql.org https://git.postgresql.org/pg/commitdiff/314fb9baeacb3426a5d9a26132aae8d828cc0ad7

  • 修复 LISTEN/NOTIFY 处理中最近引入的竞态条件。Commit 566372b3d 修复了一些涉及并发 SimpleLruTruncate 调用的竞态条件,但它在 async.c 中引入了新的竞态条件。一个新监听的后端可能会尝试读取正在被截断的 Notify SLRU 页,可能导致错误。此外,QUEUE_TAIL 指针可能被设置为一个值,该值不等于任何后端的队列位置。虽然在 v13 及更高版本中这相对无害(归功于 commit 51004c717),但在旧分支中,它导致了近乎永久的队列截断逻辑禁用,因此继续使用 NOTIFY 会导致队列已满警告,并最终无法发送更多通知。(服务器重启足以解决这个问题,但它仍然非常令人不愉快。)问题的核心是混淆 QUEUE_TAIL 是代表队列的“逻辑”尾部(即,最早仍有关联的数据)还是“物理”尾部(我们尚未截断的最旧数据)。为了修复,将其拆分为两个变量。QUEUE_TAIL 恢复其作为逻辑尾部的定义,并引入一个新变量来跟踪最早的未截断页。根据 Mikael Gustavsson 的报告。与之前的补丁一样,回溯到所有支持的分支。讨论: https://postgr.es/m/1b8561412e8a4f038d7a491c8b922788@smhi.se https://git.postgresql.org/pg/commitdiff/9c83b54a9ccdb111ce693ada2309475197c19d70

  • 清理 src/test/locale/ 中的测试。257836a75 中的疏忽,它添加了这些测试。 https://git.postgresql.org/pg/commitdiff/b90a7fe15f78b1e2513cbcb27a33f4adc47bcd3d

  • 文档:澄清 PQconnectdbParams() 的行为。文档省略了一个关键细节,即关键字数组中的条目如果其对应的值数组条目为 NULL 或空字符串,则会被忽略;它不会覆盖参数的任何先前获取值。(参见 conninfo_array_parse()。)我以为这会强制设置回默认值,这导致我遇到了 bug #16746;但事实并非如此。在处理此问题时,我无法抗拒地对 PQconnectdbParams() 的描述以及关于连接 URI 语法的章节进行了一些文风上的修改。讨论: https://postgr.es/m/931505.1606618746@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/d5e2bdf7dda712a60234f08e036ec9de28085a2d

Heikki Linnakangas 提交

Álvaro Herrera 提交

David Rowley 提交

Michaël Paquier 提交

Fujii Masao 提交

  • 文档:从一些索引项中删除不必要的空格字符。之前,一些索引项在文档中有“ ,”(即空格加逗号),如下所示。由于逗号前的空格字符是不必要的,因此此提交将其删除,以与其他索引项保持一致。parallel_leader_participation 配置参数,其他规划器选项 作者:Fujii Masao Reviewed-by: Euler Taveira 讨论: https://postgr.es/m/e87b4ddf-1498-2850-bf55-519df3928fd4@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/e522024bd8dd28a0f13dcccfd39170698f45c939

  • 文档:添加关于预处理语句的重新分析和重新规划的描述。当语句使用的数据库对象发生定义性更改或其规划器统计信息更新时,预处理语句会被重新分析和重新规划。前者之前已有文档记录,但后者之前没有。此提交将后者添加到文档中。作者:Atsushi Torikoshi Reviewed-by: Andy Fan、Fujii Masao 讨论: https://postgr.es/m/3ac82f4817c9fe274a905c8a38d87bd9@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/4a36eab79a193700b7b65baf6c09c795c90c02c6

  • pg_stat_statements:跟踪 pgss 条目被取消分配的次数。如果观察到的不同语句多于 pg_stat_statements.max,则会取消分配关于执行次数最少的语句的 pg_stat_statements 条目。此提交使我们能够跟踪这些条目被取消分配的总次数。此数字可以在此提交添加的 pg_stat_statements_info 视图中查看。当调整 pg_stat_statements.max 参数时,这很有用。如果它很高,即条目被频繁取消分配,这可能会导致性能回归,我们可以增加 pg_stat_statements.max 来避免频繁的取消分配。pg_stat_statements_info 视图旨在显示 pg_stat_statements 模块本身的统计信息。目前它只有一个列“dealloc”,表示条目被取消分配的次数。但即将发布的补丁将在视图中添加其他列(例如,最后一次重置 pg_stat_statements 统计信息的时间)。作者:Katsuragi Yuta、Yuki Seino Reviewed-by: Fujii Masao 讨论: https://postgr.es/m/0d9f1107772cf5c3f954e985464c7298@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/9fbc3f318d039c3e1e8614c38e40843cf8fcffde

  • 在 worker_spi 中使用标准的 SIGHUP 和 SIGTERM 信号处理程序。以前 worker_spi 使用自定义的 SIGHUP 和 SIGTERM 信号处理程序。此提交使 worker_spi 使用标准信号处理程序,以简化代码。请注意,在 worker_spi 中,die() 被用作标准的 SIGTERM 信号处理程序,而不是 SignalHandlerForShutdownRequest() 或 bgworker_die()。以前,退出处理只能在主循环内退出,而不能在它调用的后端代码内退出。这就是为什么在这里需要使用 die(),以便 worker_spi 在执行查询时能够响应 SIGTERM 信号。也许可以说 worker_spi 在查询执行期间无法响应 SIGTERM 是一个错误。但由于 worker_spi 只是后台 worker 代码的一个示例,因此我们不进行回溯。感谢 Craig Ringer 报告和调查此问题。作者:Bharath Rupireddy Reviewed-by: Fujii Masao 讨论: https://postgr.es/m/CALj2ACXDEZhAFOTDcqO9cFSRvrFLyYOnPKrcA1UG4uZn9hUAVg@mail.gmail.com 讨论: https://postgr.es/m/CAGRY4nxsAe_1k_9g5b47orA0S011iBoHsXHFMH7cg7HV0O1bwQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/2a0847720ae6fa4180bfbe404e4e6bbf2f737708

  • 在 test_shm_mq worker 中使用标准的 SIGTERM 信号处理程序 die()。以前 test_shm_mq worker 将 die() 的简化版本用作 SIGTERM 信号处理程序。此提交使其使用 die() 来简化代码。从代码上看,die() 和之前使用的简化版本之间的区别在于信号处理程序是否可以直接调用 ProcessInterrupts()。但在后台 worker 中,DoingCommandRead 标志永远不会为真,die() 也永远不会直接调用 ProcessInterrupts()。因此,test_shm_mq worker 可以像其他 bgworker 进程(例如,逻辑复制应用启动器或 autoprewarm worker)当前那样安全地使用 die()。感谢 Craig Ringer 报告和调查此问题。作者:Bharath Rupireddy Reviewed-by: Fujii Masao 讨论: https://postgr.es/m/CAGRY4nxsAe_1k_9g5b47orA0S011iBoHsXHFMH7cg7HV0O1bwQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ef848f4ac5a4bd072c65867186268775acfb4298

  • 修复 CLUSTER 进度报告扫描的块数。以前,pg_stat_progress_cluster 视图将堆扫描的当前块号报告为扫描的堆块数(即 heap_blks_scanned)。当启用 synchronize_seqscans 时,此报告的数字可能不正确,因为它允许堆扫描从中间块开始。这可能导致 heap_blks_scanned 列发生回绕。此提交通过计算从堆扫描开始的块到扫描的当前块的块数来修复此错误,并在 heap_blks_scanned 列中报告该数字。此外,在 pg_stat_progress_cluster 视图中,如果最后一个扫描的页面是空的,heap_blks_scanned 在堆扫描阶段结束时可能无法达到 heap_blks_total。此提交通过在堆扫描阶段完成后手动将 heap_blks_scanned 更新为与 heap_blks_total 相同的值来修复此错误。回溯到 v12(引入 pg_stat_progress_cluster 视图的版本)。Reported-by: Matthias van de Meent 作者:Matthias van de Meent Reviewed-by: Fujii Masao 讨论: https://postgr.es/m/CAEze2WjCBWSGkVfYag001Rc4+-nNLDpWM7QbyD6yPvuhKs-gYQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/3df51ca8b39f08ef19a77b9776f2547c86b70c49

Andrew Gierth 推送

  • 正确检查 ExecSupportsMarkRestore 中的 index mark/restore。以前,这段代码假设所有 IndexScan 节点都支持 mark/restore,但这并不总是正确的,因为它取决于可选的 index AM 支持函数。这可能导致在某些罕见的边界情况(mergejoin 没有排序键,并且无序的非 btree 索引扫描放在内部路径上,没有保护性的 Materialize 节点)中出现关于缺少支持函数的错误。(通常,merge join 需要有序输入的事实会避免此错误。)此 bug 历史悠久,因此回溯到所有版本。根据 Eugen Konkov 在 IRC 上的报告。讨论: https://postgr.es/m/87o8jn50be.fsf@news-spur.riddles.org.uk https://git.postgresql.org/pg/commitdiff/660b89928d18386de7755565c008439ae75d1218

Amit Kapila 提交

Thomas Munro 推送

Peter Eisentraut 提交

Noah Misch 推送

待处理补丁

Amul Sul 发送了实现 ALTER SYSTEM READ {ONLY|WRITE} 的补丁的又一修订版。

Daniel Vérité 发送了实现 libpq 的 batch/pipelining 的补丁的又一修订版。

Justin Pryzby 和 Tomáš Vondra 交换了实现表达式上扩展统计信息的补丁。

Álvaro Herrera 发送了避免 brin 摘要错误(如果索引被并发重索引,则可能发生)的补丁的又一修订版。

Álvaro Herrera 发送了一个补丁,修复了一个 bug,该 bug 表现为 walsender 在关闭过程中卡住而关闭,从而阻止 postmaster 通过检查 XLogRecPtrIsInvalid(replicatedPtr) 是否为 true 来完成关闭周期。

Zeng Wenjing 发送了三个更多修订版的补丁,以实现全局临时表。

Bharath Rupireddy 发送了两个更多修订版的补丁,以实现 postgres_fdw 连接缓存——使远程会话持续到本地会话退出。

Bharath Rupireddy 和 Heikki Linnakangas 交换了补丁,使得在安全的情况下可以在 CREATE TABLE AS 中使用并行插入。

Tomáš Vondra 发送了使用非易失性存储作为 WAL 缓冲区的补丁的又一修订版。

Takayuki Tsunakawa 发送了两个更多修订版的补丁,为外部表添加了批量插入。

Justin Pryzby 发送了允许 INSERT SELECT 使用 BulkInsertState、使 INSERT SELECT 使用 multi_insert 并动态切换到 multi-insert 模式的补丁的又一修订版。

Michaël Paquier 发送了重构 SHA2 和 crypto hash API、将 cryptohash_openssl.c 切换为使用 EVP,以及让 pgcrypto 为 EVP 使用核心的 resowner 设施的补丁的又一修订版。

Justin Pryzby 发送了允许 CLUSTER、VACUUM FULL 和 REINDEX 动态更改表空间的补丁的又一修订版。

Keisuke Kuroda 发送了一个补丁,通过减小 ri SPI 计划哈希的大小来修复在具有 FK 的分区表上出现巨大内存消耗的 bug。

Konstantin Knizhnik 发送了两个更多修订版的补丁,以实现 libpq 的自定义压缩。

Takamichi Osumi 发送了一个补丁,使其有可能禁用 WAL 日志记录以加速批量加载。

Nathan Bossart 发送了两个补丁,为 CHECKPOINT 添加了 FAST 选项。

Amit Kapila、Ajin Cherian 和 Peter Smith 交换了实现两阶段事务逻辑解码的补丁。

David Rowley 发送了一个补丁,定义 pg_attribute_cold 和 pg_attribute_hot 为 minGW 8.1 上的空宏,以避免该工具链中的 bug。

Li Japin 发送了一个补丁的又一修订版,通过新的 GUC idle_session_timeout 允许终止空闲会话,并减少 setitimer() 的调用次数。

Euler Taveira de Oliveira 发送了一个补丁,将逻辑解码消息添加到 pgoutput,在流式传输时添加 xid 到消息,解释了为什么 LOGICAL_REP_MSG_MESSAGE 被忽略,简化了 parse_output_parameters 函数使其接受整个 PGOutputData 而不是零散部分,调整了消息的 in_streaming,并全面检查了测试以应对所有这些变化。

Peter Eisentraut 提交了另一个补丁修订版,添加了 result_format_auto_binary_types 设置。

Michaël Paquier 发送了一个补丁的又一修订版,修复了一个 bug,该 bug 表现为 vac_update_datfrozenxid 在 pg_database 元组包含 toast 属性时会引发“错误的元组长度”。

Kyotaro HORIGUCHI 发送了又一个补丁的修订版,以修复几何类型中 NaN 的处理。

Masahiko Sawada 发送了一个补丁的又一修订版,为多个外部服务器启用了两阶段提交。

Daniel Gustafsson 发送了一个补丁的又一修订版,使得可以联机启用和禁用数据校验和。

Alexander Korotkov 发送了一个补丁,实现了一个内置的基础设施,用于在自动化测试套件中重现并发问题。该基础设施的核心是“停止事件”,它们是代码中的特殊位置,可以在满足某些条件时停止执行。

Peter Eisentraut 发送了一个补丁的又一修订版,根据 SQL 标准在公用表表达式中实现了 SEARCH 和 CYCLE 子句。

Thomas Munro 发送了一个补丁的又一修订版,旨在让 latches 发送更少的信号,使用 SIGURG 而不是 SIGUSR1 用于 latches,为 epoll latches 使用 signalfd,并为 kqueue latches 使用 EVFILT_SIGNAL。

Tom Lane 发送了一个补丁的又一修订版,用于在查询结束时报告 GUC 更改。

Peter Smith 发送了一个补丁,使用枚举来表示消息类型。

David Zhang 发送了三个补丁的修订版,为 pgbench 添加了表访问方法作为选项。

Anastasia Lubennikova 发送了一个补丁,用于处理传递给 normal_rand() 的负元组数量。

Peter Eisentraut 发送了一个补丁,使 pageinspect 能够将块号参数更改为 bigint。

Bertrand Drouvot 发送了四项更多修订版的补丁,以通过新的 GUC log_recovery_conflict_waits 来记录待机恢复冲突等待。

Kasahara Tatsuhito 发送了三项更多修订版的补丁,以修复因大量表导致的 autovacuum 问题的 bug。

Masahiko Sawada 发送了一个补丁的又一修订版,为 pg_stat_wal 视图添加了基本统计信息。

Takamichi Osumi 发送了一个补丁,以防止归档恢复命中来自 wal_level=minimal 的 WAL 并且服务器继续工作的场景,这种情况可能导致数据未被复制。

Euler Taveira de Oliveira 发送了一个补丁,在后端崩溃后删除临时文件,以避免因多次崩溃可能导致的 ENOSPC 条件。

Pavel Borisov 发送了一个补丁的又一修订版,使用 SP-GiST 索引访问方法实现覆盖索引。

Kirk Jamison 发送了另一个修订版的补丁,以在恢复期间防止使 smgrextend() 中的块失效,向 smgrnblocks() 添加一个用于缓存块的 bool 参数,在恢复期间通过避免扫描整个缓冲区池来缩减 DropRelFileNodeBuffers()(当关系足够小时或要失效的总块数低于完全扫描的阈值时),并使 DropRelFileNodesAllBuffers() 在恢复期间(当关系足够小时或要失效的块数低于完全扫描阈值时)跳过扫描整个缓冲区池耗时的操作。

Krunal Bauskar 和 Alexander Korotkov 交换了补丁,以改进 ARM 上的自旋锁实现。

Arne Roland 发送了三个补丁的修订版,以确保重命名分区表上的触发器也会重命名分区上的触发器。

Bharath Rupireddy 发送了一个补丁,用于修复 pg_workers 关闭时的错误消息,使其谈论后台工作进程而不是适用于其他情况的不存在的连接。

Stephen Frost 发送了一个补丁的又一修订版,在需要时将 GSS 信息添加到授权连接的日志消息中。

Michael Banck 发送了一个补丁,以澄清 CREATEROLE 角色可以授予默认角色的事实。

Ashutosh Bapat 和 Alexander Korotkov 交换了使 LSN 易于打印的补丁。

Andreas Karlsson 发送了一个 PoC 补丁,以修复 btree_gist 提供的扩展因丢弃 netmask 信息而导致的 inet/cidr 支持损坏的问题。

Pavel Stěhule 和 Justin Pryzby 交换了补丁,使得 pg_dump 可以从文件中读取要转储的表。

Justin Pryzby 发送了一个补丁的又一修订版,使 CLUSTER ON 成为 pg_dump 中的一个独立转储对象,为分区表实现 CLUSTER,将 indisclustered 的更改传播到子/父表,使父索引失效,使父索引在附加时进行集群,并保留聚集分区索引的子代的 indisclustered。

Simon Riggs 发送了一个补丁的又一修订版,为 VACUUM 添加了 FAST_FREEZE 选项。

Simon Riggs 发送了一个补丁,为 lazy VACUUM 实现 one_freeze 然后 max_freeze。

Justin Pryzby 发送了一个补丁的又一修订版,使 pg_ls_* 显示目录和共享文件集。

Justin Pryzby 发送了一个补丁的又一修订版,移除了对 pg_dump 的 8.1 之前的开关行为的引用。

Justin Pryzby 发送了一个补丁的又一修订版,允许对分区表使用 CREATE INDEX CONCURRENTLY,为更多集成添加 SKIPVALID 标志,并使 ReindexPartitions() 设置 indisvalid。

Paul A Jungwirth 发送了两个更多修订版的补丁,以实现 multiranges。

Dean Rasheed 发送了一个补丁的又一修订版,以改进 OR 子句的估计。

James Coleman 发送了一个补丁,如果 gather merge 路径排序不充分,则报错。

James Coleman 发送了另一个修订版的补丁,以确保 generate_useful_gather_paths 不会跳过未排序的子路径,在 generate_useful_gather_paths 中强制路径键的并行安全性,禁止在 proactive sort 中使用 SRF,删除 volatile expr target 搜索,理由是那时不需要它,并在 prepare_sort_from_pathkeys 中记录 find_em_expr_usable_for_sorting_rel。