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

PostgreSQL 每周新闻 - 2021 年 6 月 13 日

发布于 2021-06-14 by PWN
PWN

PostgreSQL 每周新闻 - 2021 年 6 月 13 日

本周人物

PostgreSQL 产品新闻

pg_statement_rollback v1.2,一个为语句级别添加服务器端事务和回滚功能的扩展,已发布

六月 PostgreSQL 招聘信息

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

PostgreSQL 相关新闻

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

本周 PostgreSQL 周报由 David Fetter 提供。

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

已应用补丁

Tomáš Vondra 提交了

Tom Lane 提交

  • 修复 equalfuncs.c 对 FuncCall.funcformat 行为不一致的问题。对 CoercionForm 字段的其他 equalfuncs.c 检查使用 COMPARE_COERCIONFORM_FIELD(使其成为 no-ops),但 commit 40c24bfef 忽略了让 _equalFuncCall 也这样做。修复此问题。仅当 FuncCall.funcformat 没有语义影响,而只是决定 ruleutils.c 的显示格式时,这才是严格正确的。40c24bfef 在解析分析中添加了几个可能破坏该规则的检查;但仔细检查后,它们是多余的,所以只需将其删除。根据 Noah Misch 的报告。讨论:https://postgr.es/m/20210606063331.GC297923@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/a65e9f3f1405b786673feec131879843432bf9a6

  • 修复客户端代码中对可能编码错误的字符串的不谨慎处理。字符串末尾附近编码不正确的 multibyte 字符可能导致各种处理循环越过字符串的终止 NUL,结果从没有可检测到的问题到程序崩溃不等,具体取决于内存中的后续内容。这在服务器端不是问题,因为我们小心地在对字符串进行任何有趣的处理之前验证其编码。然而,这种疏忽渗入到客户端代码中,客户端代码不应假定任何人已经验证了其输入的编码。虽然这无疑是一个值得修复的错误,但 PG 安全团队选择不将其视为安全问题,主要原因是任何不受信任的文本都应在将其纳入 SQL 或 psql 命令之前通过 PQescapeLiteral 或类似方法进行清理。(如果应用程序未能这样做,则可以使用相同的方法导致 SQL 注入,后果可能比仅仅客户端程序崩溃严重得多。)这些函数已经根据 CVE-2006-2313 对此类问题进行了防范。为解决此问题,发明了 PQmblenBounded(),它类似于 PQmblen(),但它不会返回超过字符串剩余字节数的字节数。在 HEAD 中,我们可以将其作为一个新的 libpq 函数,就像 PQmblen() 一样。但是,在稳定分支中更改 libpq 的 API 是不明智的,因此在后端分支中,将 PQmblenBounded 定义为宏,在需要它的文件中使用。(请注意,仅仅改变 PQmblen 的行为并不是一个好主意;特别是,它会完全破坏转义函数对这个确切问题的防御。所以我们只想为那些没有更好方法的调用者提供一个版本。)根据 houjingyi 的私人报告。向所有支持的分支进行回溯。 https://git.postgresql.org/pg/commitdiff/42f94f56bf9559f0a3cf5f3ffde50655834694ee

  • 稳定 contrib/seg 回归测试。如果在填充 test_seg 表后立即发生 autovacuum,它将更新统计信息,导致我们优先选择普通索引扫描而不是位图扫描,从而破坏预期输出(以及测试用例的目的)。为解决此问题,只需强制在这里选择位图扫描。自从 commit de1d042f5 以来,这显然是不正确的。尚不清楚为什么我们最近才看到由于它而导致的任何编译场故障;但 prairiedog 在过去一周内在此测试中失败了两次。因此,回溯到 v11(此测试用例在该版本中引入)。 https://git.postgresql.org/pg/commitdiff/d16ebfbff74b30c83a4669a1df318cacfa7e52ca

  • 在 SQL 标准函数体中处理空语句时避免崩溃。gram.y 在组装 routine_body_stmt_list 时应丢弃 NULL 指针(空语句),就像它处理其他语句列表一样。Julien Rouhaud 和 Tom Lane,根据 Noah Misch 的报告。讨论:https://postgr.es/m/20210606044418.GA297923@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/bfeede9fa464ab707eb5ac5704742bf78bd7ac9e

  • 避免在持久化非稳定游标时出现错误行为。PersistHoldablePortal 一直假设它应该存储要持久化的查询的整个输出,这需要重新定位和重新读取输出。如果查询不稳定,这会很麻烦:我们可能会得到不同的行内容,甚至不同数量的行,这会极大地混淆游标状态。如果游标是 NO SCROLL,这很容易解决:只需存储剩余的查询输出,无需任何重定位,并调整 portal 的游标状态以匹配。除了消除语义问题外,这可能比存储整个输出更有效。如果游标是可滚动(scrollable)的,我们能做的有限,但对于易变查询(volatile query)的结果进行滚动已经很不安全了。我们只需更清晰地记录,无法保证从该查询获得正确结果。已经存在禁止将 SCROLL 与 FOR UPDATE/SHARE 一起使用的规定,这是 SELECT 查询产生非稳定结果的一种方式。我们可以设想禁止在查询包含易变函数时使用 SCROLL,但这会很昂贵。此外,这可能会破坏运行良好的应用程序,如果它们具有实际上是稳定的但用户却忽略标记为稳定的函数。因此,我们仅限于记录这种危险。虽然这个问题已经存在一段时间了,但在 v11 中它变得更加严重,v11 引入了持久化 plpgsql 游标(可能是隐式游标)的可能性,即使它们违反了 WITH HOLD 的规则。因此,我选择回溯到 v11,而不是更早的版本。根据 bug #17050,来自 Алексей Булгаков。讨论:https://postgr.es/m/17050-f77aa827dc85247c@postgresql.org https://git.postgresql.org/pg/commitdiff/ba2c6d6cec000f0aeaeda4d56a23a335f6164860

  • 强制 plpgsql 的隐式游标使用 NO SCROLL。对 bug #17050 的进一步思考表明,为 plpgsql FOR-over-query 循环打开的隐式游标使用 CURSOR_OPT_NO_SCROLL 是个好主意。这可以确保,如果有人在循环中提交,PersistHoldablePortal 不会尝试重新定位和重新读取游标。虽然如果查询中出现 FOR UPDATE/SHARE,我们无论如何都会选择 NO_SCROLL,但易变函数还有其他风险;而且,无论如何,花费精力存储我们确信不需要的行是愚蠢的。(同时,改进 exec_run_select 中的注释,该注释对何时可以使用并行模式的理由有些含糊。游标操作对于无名 portal 没有风险。)直到 v11 之前都不是问题,v11 引入了持久化此类游标的可能性。因此,回溯到 v11。根据 bug #17050,来自 Алексей Булгаков。讨论:https://postgr.es/m/17050-f77aa827dc85247c@postgresql.org https://git.postgresql.org/pg/commitdiff/be90098907475f3cfff7dc6d590641b9c2dae081

  • 避免在某些支持 GSS 的环境中 ECPG 测试失败。Buildfarm 成员 hamerkop 一直报告说,connect/test5.pgc 中的两个测试用例显示出与测试期望不同的错误消息,因为自从 commit ffa2e4670 以来,libpq 的连接失败消息暴露了尝试 GSS 加密连接但失败的事实。这本身就是一个相当有趣的信息,我当然不希望责怪信使,但我们需要做些事情来稳定 ECPG 的结果。对于这两个失败案例中的第二个,我们可以添加 gssencmode=disable 选项来防止差异。然而,对于第一个失败案例,这个解决方案存在问题,因为该案例唯一的独特之处在于它测试的是一个完全省略的连接目标;没有地方可以添加该选项而不破坏测试用例的目的。在对其他解决方案进行了各种尝试但发现它们具有不良的副作用后,最可行的方法就是放弃并删除该测试用例。也许我们可以稍后恢复此功能,如果我们能弄清楚为什么 GSS 代码在 hamerkop 的环境中行为不当。感谢 Michael Paquier 对替代方案的探索。讨论:https://postgr.es/m/YLRZH6CWs9N6Pusy@paquier.xyz https://git.postgresql.org/pg/commitdiff/9bb5eecce645dd72853e3ed262bef7bf11cae566

  • 在 LockRows 节点到达末尾时关闭 EvalPlanQual 机制。之前,我们让 EPQ 子执行器保持运行直到 ExecEndLockRows。这会导致它可能持有的任何缓冲区 pin 或其他资源一直持有到 ExecutorEnd,在某些代码路径中意味着它们一直持有到 Portal 关闭。这会引起用户可见的问题,例如阻塞 VACUUM;并且与普通表扫描节点的行为不同,普通表扫描节点在返回 EOF 指示时将释放所有缓冲区 pin。我们可以通过在返回 NULL 之前调用 EvalPlanQualEnd 来使 LockRows 的工作更像其他计划节点。如果节点没有完全运行,我们仍然需要在 ExecEndLockRows 中调用它,但在正常情况下,第二次调用不起作用且成本很小。根据 Yura Sokolov 的报告。原则上这是一个长期存在的错误,但鉴于缺乏其他抱怨以及后果的严重性较低,我选择不回溯。讨论:https://postgr.es/m/4aa370cb91ecf2f9885d98b80ad1109c@postgrespro.ru https://git.postgresql.org/pg/commitdiff/bb4aed46a5aeb00d2f1d8b8160feed339f4eaf12

  • 再次调整 logrep 工作进程的快照处理。事实证明,worker.c 中 TRUNCATE 的代码路径在执行用户定义的代码时也没有谨慎地建立快照,这使得 commit 84f5c2908 添加的检查在触发触发器时失败。我们可以用 Push/PopActiveSnapshot 包裹 truncate 调用,但最好建立一个在整个复制步骤执行过程中都持有快照的策略。为了实现这一点以及可能的未来需求,将之前的 ensure_transaction 调用替换为 begin/end_replication_step 对。根据 Mark Dilger 的报告。回溯到 v11,就像之前的更改一样。讨论:https://postgr.es/m/B4A3AF82-79ED-4F4C-A4E5-CD2622098972@enterprisedb.com https://git.postgresql.org/pg/commitdiff/3a09d75b4f6cabc8331e228b6988dbfcd9afdfbe

  • 重新考虑过程 OUT 参数的处理。Commit 2453ea142 重新定义了 pg_proc.proargtypes 以包含过程的 OUT 参数的类型。虽然这在实现 SQL 规范的 DROP PROCEDURE 行为方面有一些优势,但它在其他许多方面非常糟糕。特别是,由于 pg_proc 的主键是 name + proargtypes,这使得可能存在名称+输入参数相同但输出参数类型不同的多个过程。这将使得不可能仅通过为输出参数编写 NULL(或“?”,或任何其他不带数据类型的表示法)来调用其中一个过程。此外,该更改很可能会给检查 pg_proc 并期望 proargtypes 的传统定义的客户端应用程序带来严重的混淆。因此,将 proargtypes 的定义恢复到以前的状态,并撤销为支持该定义而添加的许多复杂性。为了支持 SQL 规范的 DROP PROCEDURE 行为,当命令的参数列表中没有 argmode 标记时,我们会同时进行查找(即,同时匹配 proargtypes 和 proallargtypes),如果找到唯一匹配则成功。原则上,这可能导致使用仅一种规则不会发生的歧义函数失败。然而,过程名称的重载被认为是一种相当罕见的用法,因此在实践中不应引起太多问题。Postgres 特定代码(如 pg_dump)可以通过指定所有过程参数的 argmodes 来防御任何此类故障的可能性。这还修复了 CALL 语句与命名参数相关的其他几个错误,并稍微改进了文档。由于过程 OUT 参数的表示方式发生了变化,因此强制 catversion 更新。讨论:https://postgr.es/m/3742981.1621533210@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e56bce5d43789cce95d099554ae9593ada92b3b7

  • 修复分区表复制逻辑中的多个崩溃错误。apply_handle_tuple_routing() 在检测并报告所需的更新元组不存在后,仍然尝试更新该元组,导致空指针解引用。logicalrep_partition_open() 未能确保它为分区构建的 LogicalRepPartMapEntry 与分区根目录的入口完全独立,这会在根条目之后被释放或重建时导致问题。与此同时,在发布方,pgoutput_change() 有时会尝试将 execute_attr_map_tuple() 应用于 NULL 元组。第一个错误由 Sergey Bernikov 在 bug #17055 中报告;我在开发此不幸地未经充分测试的代码的一些测试用例时发现了另外两个。第一个问题的诊断和补丁由 Amit Langote 提供;后两个补丁由我提供;新测试用例由我提供。回溯到 v13(此逻辑在该版本中引入)。讨论:https://postgr.es/m/17055-9ba800ec8522668b@postgresql.org https://git.postgresql.org/pg/commitdiff/ab55d742eb7162c22ee60f1e15e07d2a60063c4e

  • 避免使用断言来检查复制协议违规。使用断言来检查传入消息的有效性是一个极差的决定。在调试构建中,损坏或恶意的远程客户端不应轻易地使 logrep 工作进程崩溃。在非调试构建中,后果可能更糟,因为它们根本不会进行此类检查,从而导致不可知的错误行为。因此,将所有可能被错误或乱序的复制消息触发的断言提升为完整的测试和报告。为避免给翻译团队增加负担,我们制定了这样的策略:复制协议违规错误报告不需要翻译。因此,所有新消息都使用 errmsg_internal()。为了保持一致性,一些旧消息也做了类似更改。在此过程中,修复了一些非惯用或完全错误的 hash_search() 用法。其中大多数错误是在“流复制”补丁(commit 464824323)中引入的,但其中一些可以追溯到很久以前。根据需要进行回溯。讨论:https://postgr.es/m/1719083.1623351052@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/fe6a20ce54cbbb6fcfe9f6675d563af836ae799a

  • 确保 pg_filenode_relation(0, 0) 返回 NULL。之前,relfilenode 的零值会导致关于“意外重复”的令人困惑的错误消息。该函数对于其他无效的 relfilenode 值返回 NULL,因此零也应如此处理。这从一开始就是这样,所以回溯到所有支持的分支。Justin Pryzby 讨论:https://postgr.es/m/20210612023324.GT16435@telsasoft.com https://git.postgresql.org/pg/commitdiff/1250aad42520fd5a3db68d6381997b7e1f9bb4aa

  • 恢复等待 postmaster 重启的 TAP 测试的健壮性。几个 TAP 测试使用 poll_query_until() 来等待 postmaster 重启。它们检查一个简单的查询(例如“SELECT 1”)是否成功。然而,在 commit 11e9caff8 之后,这变得有问题,因为我们现在通过 stdin 将该查询馈送给 psql,如果 psql 在读取查询之前退出,我们就有可能因 IPC::Run 抱怨 SIGPIPE 失败。因此,在需要等待连接失败停止的情况下,我们不能使用非空查询。根据 commit c757a3da0 和 6d41dd045 的先例,我们可以在这种情况下将“undef”作为查询传递,以确保 IPC::Run 没有需要写入的内容。但是,然后我们必须声明预期输出为空,这暴露了 poll_query_until 的一个缺陷:如果 psql 完全失败并返回空 stdout,poll_query_until 会将其视为成功!这是因为,与其文档相反,它实际上没有检查 psql 失败,既不查看退出状态也不查看 stderr。为解决此问题,将 poll_query_until 调整为除了 stdout 匹配外,还需要空 stderr。 (我尝试检查退出状态,但似乎 psql 在我们认为是成功的情况下经常会退出(1)。这可能是一个有待将来修复的问题,但它会是一个不可回溯的行为更改。)回溯到 v10。需要此更改的测试用例仅在 v11 及更高版本中存在,但为保持 v10 中 poll_query_until 的行为一致,以防将来回溯另一个类似的测试用例。(9.6 目前不需要此更改,因为在该分支中 poll_query_until 不能被告知接受空 stdout 作为成功的情况。)根据各种编译场故障,主要是在 hoverfly 上。讨论:https://postgr.es/m/CAA4eK1+zM6L4QSA1XMvXY_qqWwdUmqkOS1+hWvL8QcYEBGA1Uw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f452aaf7d4a96cfcecd6c60ccd294ffe7b8ea088

Etsuro Fujita 推送

Amit Kapila 提交

Michaël Paquier 提交

Peter Eisentraut 提交

Bruce Momjian 已推送

Robert Haas 提交

  • 修复新备用服务器无法跟随新主服务器的角点故障。这仅在以下情况下发生:(1) 新备用服务器本地没有 WAL 可用,(2) 新备用服务器从旧时间线开始,(3) 提升发生在备用服务器开始的新 WAL 段中,(4) 新时间线的时间线历史文件可从存档中获取,但 WAL 文件不可(即这是一个竞争条件),(5) 新时间线的 WAL 文件可通过流复制获得,并且 (6) recovery_target_timeline='latest'。Commit ee994272ca50f70b53074f0febaec97e28f83c4e 引入了此逻辑,并且比之前的代码有所改进,但它错误地处理了这种情况。如果 recovery_target_timeline='latest' 且设置了 restore_command,validateRecoveryParameters() 可以将 recoveryTargetTLI 更改为与 receiveTLI 不同。如果之后尝试流复制,expectedTLEs 将使用错误时间线的历史进行初始化。它应该是一个解释如何到达目标时间线的条目列表,但在这种情况下,它最终是一个解释如何到达新备用服务器原始时间线的条目列表,这是不正确的。Dilip Kumar 和 Robert Haas,审阅者:Kyotaro Horiguchi。讨论:http://postgr.es/m/CAFiTN-sE-jr=LB8jQuxeqikd-Ux+jHiXyh4YDiZMPedgQKup0g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/caba8f0d43fb679c6f9643456080408a6bc370e8

  • 调整新的测试用例以设置 wal_keep_size。根据 buildfarm 成员 conchuela 和 Kyotaro Horiguchi 的说法,级联备用服务器需要的 WAL 段可能会被太快删除。希望这能阻止这种情况发生。Kyotaro Horiguchi 讨论:http://postgr.es/m/20210610.101240.1270925505780628275.horikyota.ntt@gmail.com https://git.postgresql.org/pg/commitdiff/4dcb1d087aebc6fc2477ce4458ea82f548e2c1ee

David Rowley 提交

Noah Misch 推送

Álvaro Herrera 提交

Andres Freund 提交

Andrew Dunstan 推送

  • 修复新恢复测试在 msys 下的使用。Commit caba8f0d43 对 msys 来说不太对,正如许多编译场动物(包括 jacana 和 fairywren)所证明的那样。我们需要在 archive 命令中使用 msys perl,但调用它的方式要让 Windows 能够理解路径。此外,在 copy 脚本内部,我们需要将 Windows 路径转换为 msys 路径。 https://git.postgresql.org/pg/commitdiff/c3652f976b7696a96a9c5606cc2d613af77e2e63

  • 进一步调整 stuck_on_old_timeline 恢复测试。翻译目标目录路径中的路径斜杠。这让旧分支感到困惑,但为了统一性,它应用于所有分支。Perl 完全能够理解带有正斜杠的路径。同时,为了与其他测试的统一性,根据 Tom Lane 的抱怨,恢复之前的 archive_wait 查询。 https://git.postgresql.org/pg/commitdiff/9d97c3408319b43718e4b85bc694697db1af32c6

待处理补丁

Ranier Vilela 提交了另一个修订版的补丁,以减少 detoasted 值的开销。

Takamichi Osumi 提交了另外三个修订版的补丁,以记录在同步逻辑解码中可能出现的死锁。

Andrey V. Lepikhov 提交了另一个修订版的补丁,以实现批量 COPY FROM 到外部表。

Hou Zhijie 提交了另一个修订版的补丁,以自适应地缓存分区边界偏移量。

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

Tomáš Vondra 提交了两个修订版的补丁,以使逻辑解码能够复制序列。

Justin Pryzby 提交了一个补丁,用于在 ps 显示中显示“syncing data directories”。

Anastasia Lubennikova 提交了另外两个修订版的补丁,用于测试回归测试的回放。

Aleksander Alekseev 和 Michaël Paquier 提交了补丁,以修复 pg_event_trigger_ddl_commands 中的丢弃对象处理。

Dilip Kumar 和 Amit Langote 交换了补丁,以修复投机性中止的解码。

Peter Eisentraut 提交了一个补丁,用于自动生成节点支持函数。

Kyotaro HORIGUCHI 和 Amit Kapila 交换了旨在修复逻辑复制中出现 keepalive 洪水错误的补丁。

Quan Zongliang 提交了一个补丁,用于从 KnownAssignedTransactionIdes 子模块中删除未使用的代码。

Emre Hasegeli 提交了一个补丁,用于在 btree_gist 中支持 bool。

Jacob Champion 提交了一个 PoC 补丁,用于实现带有 OAUTHBEARER 的联合认证/授权。

Jeff Davis 提交了另一个修订版的补丁,用于跟踪最后的恢复 LSN、时间和总计数,这将使得能够从其他节点看到未记录表重置。

Hou Zhijie 提交了一个补丁,用于删除 get_qual_from_partbound 中一个不再使用的函数参数。

Hou Zhijie 提交了另外两个修订版的补丁,以使 INSERT ... SELECT 能够并行执行。

Peter Geoghegan 和 Matthias van de Meent 交换了补丁,以修复 GetOldestNonRemovableTransactionId 中的一个错误。GetOldestNonRemovableTransactionId(rel) 没有返回与 GlobalVisTestFor(rel) 一致的值。现在已更新此项,并添加了一些断言以确保此错误情况不会再次发生。

Peter Smith 和 Ajin Cherian 交换了补丁,以向内置逻辑复制添加对预备事务的支持,为流式事务添加预备 API 支持,并为逻辑复制跳过空事务。

Ajin Cherian 提交了另外三个修订版的补丁,以在 CREATE_REPLICATION_SLOT 命令中添加一个设置两阶段提交的选项,并在 pg_recvlogical 中添加对两阶段解码的支持。

Julien Rouhaud 提交了另外两个修订版的补丁,以添加用于可扩展解析钩子。

Kyotaro HORIGUCHI 和 Fabien COELHO 交换了旨在修复 pgbench 记录零间隔日志条目的错误的补丁。

Alexander Pyhalov 提交了一个补丁,允许将 CASE 表达式推送到外部服务器。

Jeff Davis 提交了另外两个修订版的补丁,以实现 ALTER TABLE ... SET ACCESS METHOD。

Nitin Jadhav 提交了另一个修订版的补丁,用于跟踪启动进度。

Atsushi Torikoshi 提交了另一个修订版的补丁,添加了一个函数,用于记录具有指定进程 ID 的后端当前运行的查询的完整查询字符串及其计划。

Thomas Mannhart 提交了另外两个修订版的补丁,以实现范围合并连接。

Thomas Munro 提交了一个补丁,用于调整 pg_regress 输出以适应新的长测试名称。

Bharath Rupireddy 提交了另外两个修订版的补丁,以重构 parse_subscription_options,并删除 parse_subscription_options 中类似的 ereport 调用。

Tomáš Vondra 提交了另外两个修订版的补丁,以创建描述符副本用于批处理,并为批处理仅初始化一次 slot。

Nathan Bossart 提交了一个补丁,用于添加一个用于检索共享内存大小的 pg_ctl 选项。

John Naylor 提交了另一个修订版的补丁,以重写 pg_utf8_verifystr 以提高速度。

David Rowley 提交了一个补丁,在出现“a SQL”的地方使用“an SQL”。

Alexander Korotkov 提交了四个修订版的补丁,以支持 UNNEST(multirange) 并将 multirange 强制转换为范围数组。

Hayato Kuroda 提交了一个补丁,用于忽略 pgbench 中失败的线程。

Amit Langote 提交了另一个修订版的补丁,以实现多列列表分区。

Jacob Champion 提交了另一个修订版的补丁,为表 AM API 添加了列投影列表。

Bruce Momjian 提交了三个修订版的补丁,以记录某些聚合函数在升级时需要重新创建的事实。

Ranier Vilela 提交了一个补丁,将一些有符号类型更改为无符号。

Pavel Stěhule 提交了另一个修订版的补丁,以实现模式变量。

Thomas Munro 提交了另一个修订版的补丁,为套接字关闭事件添加了 WL_SOCKET_CLOSED,并为 client_connection_check_interval 使用了 WL_SOCKET_CLOSED。

Fabien COELHO 提交了另一个修订版的补丁,为 psql 添加了 SHOW_ALL_RESULTS。

David Rowley 提交了一个补丁,用于清理执行器中的一些聚合代码。

David Rowley 提交了一个补丁,通过使用 pg_nextpower2_32 或 pg_nextpower2_64(视情况而定)替换每次迭代都进行指数级增长的紧密循环,来改进将缓冲区大小加倍的各种位置。

David Rowley 提交了一个补丁,为 ORDER BY / DISTINCT 聚合添加了正确的规划器支持。

Noah Misch 提交了一个补丁,删除了 pg_wait_for_backend_termination()。

Yugo Nagata 和 Fabien COELHO 交换了补丁,以防止 pgbench 因跳过的事务而卡住。

Ranier Vilela 提交了另一个修订版的补丁,以减少 procarray 中未匹配的类型。

Thomas Munro 提交了三个修订版的补丁,以在索引扫描中使用元组级别的 SIREAD 锁,并在可能的情况下跳过 btree 页上的 SIREAD 锁。

Alexander Korotkov 提交了一个补丁,将新文档章节的标题更改为 Range/Multirange Functions and Operators,这样更清晰。

Bharath Rupireddy 提交了一个补丁,以增强 postgres_fdw 的批量插入测试用例。

Tomáš Vondra 提交了一个补丁,以缩短 postgres_fdw 测试的运行时间。

Tomáš Vondra 提交了一个补丁,以处理扩展统计信息中的 Expr op Expr 子句。