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

由 PWN 发布于 2021-06-14
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 推送了

  • 修复 FuncCall.funcformat 的 equalfuncs.c 行为不一致。其他 equalfuncs.c 对 CoercionForm 字段的检查使用 COMPARE_COERCIONFORM_FIELD (使其成为空操作),但提交 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

  • 修复客户端代码中可能编码错误的字符串的不谨慎处理。字符串末尾附近不正确编码的多字节字符可能会导致各种处理循环运行超过字符串的终止 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 立即出现,它将更新统计信息,使其偏好于普通索引扫描而不是位图扫描,从而破坏了预期输出(以及测试用例的目的)。为了修复此问题,只需强制在此处选择位图扫描即可。自从提交 de1d042f5 以来,这显然是错误的。目前尚不清楚为什么我们最近才看到任何由于它导致的 buildfarm 失败;但是在过去一周中,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,则很容易解决此问题:只需存储剩余的查询输出,无需任何倒带,并调整门户的游标状态以匹配。除了消除语义问题外,这可能比存储整个输出有效得多。如果游标是可滚动的,我们无能为力,但滚动易失性查询的结果已经相当不安全。我们只能更清楚地说明,不能保证从该结果中获得正确的结果。已经禁止将 SCROLL 与 FOR UPDATE/SHARE 一起使用,这是 SELECT 查询获得不稳定结果的一种方式。我们可以想象,当查询包含易失性函数时禁止 SCROLL,但这将需要大量的强制执行开销。此外,如果用户的函数实际上是稳定的但用户忽略了标记它们,则可能会破坏正常工作的应用程序。因此,请记录此风险。虽然此问题以某种形式存在了很长时间,但在 v11 中变得更糟,v11 引入了持久化 plpgsql 游标(可能是隐式游标)的可能性,即使它们违反了可以标记为 WITH HOLD 的规则。因此,我选择回溯到 v11 而不再进一步。根据 Алексей Булгаков 提出的错误 #17050。讨论:https://postgr.es/m/17050-f77aa827dc85247c@postgresql.org https://git.postgresql.org/pg/commitdiff/ba2c6d6cec000f0aeaeda4d56a23a335f6164860

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

  • 避免在某些支持 GSS 的环境中出现 ECPG 测试失败。Buildfarm 成员 hamerkop 报告说,connect/test5.pgc 中的两个测试用例显示了与测试预期不同的错误消息,因为自从提交 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。这会导致它可能持有的任何缓冲区锁或其他资源一直保持到 ExecutorEnd,在某些代码路径中,这意味着它们会被保持到 Portal 关闭。这可能会导致用户可见的问题,例如阻塞 VACUUM;而且它不像普通的表扫描节点的行为,普通的表扫描节点会在返回 EOF 指示之前释放所有缓冲区锁。通过在返回 NULL 之前调用 EvalPlanQualEnd,我们可以使 LockRows 的工作方式更像其他计划节点。我们仍然需要在 ExecEndLockRows 中调用它,以防节点没有运行到完成,但在正常情况下,第二次调用不会执行任何操作,并且成本很小。根据 Yura Sokolov 的报告。原则上,这是一个长期存在的错误,但考虑到没有其他投诉以及后果的严重程度较低,我选择不进行反向移植。讨论:https://postgr.es/m/4aa370cb91ecf2f9885d98b80ad1109c@postgrespro.ru https://git.postgresql.org/pg/commitdiff/bb4aed46a5aeb00d2f1d8b8160feed339f4eaf12

  • 进一步调整 logrep 工作进程的快照处理。事实证明,worker.c 中用于 TRUNCATE 的代码路径在执行用户定义代码时也疏于建立快照,从而导致当在该上下文中触发触发器时,提交 84f5c2908 添加的检查失败。我们可以只在 truncate 调用周围包裹 Push/PopActiveSnapshot,但是建立一个在整个复制步骤执行过程中都保持快照的策略似乎更好。为了帮助实现这一点以及未来可能的需求,请将之前的 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 参数的处理。提交 2453ea142 重新定义了 pg_proc.proargtypes,仅针对过程包括 OUT 参数的类型。虽然这对于实现 DROP PROCEDURE 的 SQL 规范行为有一些优点,但从其他许多角度来看,这是相当灾难性的。值得注意的是,由于 pg_proc 的主键是 name + proargtypes,这使得可以拥有多个具有相同名称 + 输入参数和不同输出参数类型的过程。这将使得无法通过仅为输出参数编写 NULL(或“?”或任何其他无数据类型表示法)来调用其中任何一个过程。此更改似乎也可能给检查 pg_proc 并期望 proargtypes 的传统定义的客户端应用程序造成严重的混乱。因此,将 proargtypes 的定义恢复为原来的样子,并撤消一些为支持此定义而添加的复杂性。为了支持 DROP PROCEDURE 的 SQL 规范行为,当命令的参数列表中没有 argmode 标记时,我们以两种方式执行查找(即,与 proargtypes 和 proallargtypes 进行匹配),如果只获得一个唯一的匹配,则表示成功。原则上,这可能会导致当仅使用两条规则中的一条时不会发生的模糊函数失败。然而,过程名称的重载被认为是一种相当罕见的用法,因此这在实践中应该不会引起太多问题。诸如 pg_dump 之类的 PostgreSQL 特定代码可以通过小心地为所有过程参数指定 argmodes 来防止任何此类失败的可能性。这也修复了 CALL 语句中使用命名参数的几个其他错误,并稍微改进了文档。强制 catversion 增加,因为具有 OUT 参数的过程的表示形式发生了变化。讨论: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,该逻辑是在 v13 中引入的。讨论:https://postgr.es/m/17055-9ba800ec8522668b@postgresql.org https://git.postgresql.org/pg/commitdiff/ab55d742eb7162c22ee60f1e15e07d2a60063c4e

  • 不要使用 Assert 来检查复制协议的违规行为。使用 Assert 来检查传入消息的有效性是一个非常糟糕的决定。在调试版本中,不应让一个损坏的或恶意的远程客户端如此容易地使 logrep 工作进程崩溃。在非调试版本中,后果可能更糟,非调试版本根本不会进行此类检查,从而导致谁也不知道会发生什么错误行为。因此,将每个可能由错误或乱序复制消息触发的 Assert 提升为一个完整的 test-and-ereport。为了避免臃肿翻译团队必须处理的消息集,制定一项策略,即复制协议违规错误报告不需要翻译。因此,这里的所有新消息都使用 errmsg_internal()。出于一致性,一些旧消息也进行了类似的更改。在此过程中,修复了一些不符合习惯的或完全错误的 hash_search() 用法。这些错误中的大多数都是随着“流式复制”补丁(提交 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”)是否成功。然而,在提交 11e9caff8 之后,这变得有问题,因为现在我们将上述查询通过 stdin 提供给 psql,如果 psql 在读取查询之前退出,我们可能会面临 IPC::Run 抱怨 SIGPIPE 失败的风险。因此,在我们需要等待连接失败停止发生的情况下,我们不能使用非空查询。根据提交 c757a3da0 和 6d41dd045 的先例,我们可以在这种情况下传递“undef”作为查询,以确保 IPC::Run 没有要写入的内容。然而,那么我们必须说预期的输出为空,这暴露了 poll_query_until 中的一个缺陷:如果 psql 完全失败并返回空的 stdout,poll_query_until 将将其视为成功!那是因为,与它的文档相反,它没有实际检查 psql 是否失败,既没有查看退出状态,也没有查看 stderr。为了解决这个问题,请调整 poll_query_until 以坚持空的 stderr 以及 stdout 匹配。(我尝试过检查退出状态,但似乎 psql 通常在我们需要认为是成功的情况下会退出(1)。这可能是将来需要修复的事情,但它将是一个不可反向移植的行为更改。)反向移植到 v10。需要此更改的测试用例仅存在于 v11 中,但为了以防万一将来我们反向移植另一个此类测试用例,在 v10 中保持 poll_query_until 的行为相同似乎是明智的。(9.6 当前不需要此更改,因为在该分支中,无法告知 poll_query_until 接受空的 stdout 作为成功案例。)根据各种 buildfarm 失败,主要是在 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'。提交 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 下使用的新恢复测试。提交 caba8f0d43 对 msys 来说并不完全正确,正如包括 jacana 和 fairywren 在内的几个构建农场动物所证明的那样。我们需要在存档命令中使用 msys perl,但以 Windows 可以理解路径的方式调用它。此外,在复制脚本内部,我们需要将 Windows 路径转换为 msys 路径。 https://git.postgresql.org/pg/commitdiff/c3652f976b7696a96a9c5606cc2d613af77e2e63

  • 进一步调整 stuck_on_old_timeline 恢复测试。转换目标目录路径上的路径斜杠。这让旧分支感到困惑,但为了统一性,已应用于所有分支。Perl 完全能够理解带有正斜杠的路径。顺便说一句,为了与其他测试保持一致,恢复以前的 archive_wait 查询,根据 Tom Lane 的抱怨。 https://git.postgresql.org/pg/commitdiff/9d97c3408319b43718e4b85bc694697db1af32c6

待处理的补丁

Ranier Vilela 发送了另一个补丁修订版,以减少取消烘烤值时的开销。

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

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

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

Nathan Bossart 发送了一个补丁,以预先分配 WAL 段。

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

Justin Pryzby 发送了一个补丁,以在 ps 显示中显示“正在同步数据目录”。

Anastasia Lubennikova 发送了另外两个补丁修订版,以测试回归测试的重放。

Aleksander Alekseev 和 Michaël Paquier 调整了补丁,以修复 pg_event_trigger_ddl_commands 中的删除对象处理。

Dilip Kumar 和 Amit Langote 调整了补丁,以修复推测性中止的解码。

Peter Eisentraut 发送了一个补丁,以自动生成节点支持函数。

Kyotaro HORIGUCHI 和 Amit Kapila 调整了补丁,旨在修复在逻辑复制中表现为保持活动泛滥的错误。

Quan Zongliang 发送了一个补丁,以从 KnownAssignedTransactionIdes 子模块中删除未使用的代码。

Emre Hasegeli 发送了一个补丁,以支持 btree_gist 中的布尔值。

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 记录 0 间隔日志条目的错误。

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 发送了另外两个补丁修订版,以创建用于批处理的描述符副本,并仅为批处理初始化一次槽。

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,并将 WL_SOCKET_CLOSED 用于 client_connection_check_interval。

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 发送了一个补丁,将新的文档章节标题更改为“范围/多范围函数和运算符”,这更加清晰。

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

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

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