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

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

发布于 2021-06-28,作者 PWN
PWN

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

PostgreSQL 14 Beta 2 发布。 测试!

第 12 届 PostgreSQL 大会古巴站 (PostgresqlCUBA, @PgCuba) 将于 2021 年 11 月 18-19 日在哈瓦那自由酒店举行。本次会议是 TECNOGET 大会的一部分,我们将设立一个专门用于 PostgreSQL 相关主题演讲的会场。更多详情,请联系 cu AT postgresql DOT org。

PostgreSQL 产品新闻

JDBC 42.2.22 发布

PgpoolAdmin 4.2.0,Pgpool-II 的管理工具,发布

pgCenter 0.9.0,用于观察和故障排除 PostgreSQL 的命令行管理工具,发布

六月 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 Lane 提交

  • 修复 mktime() 新版本中的可移植性问题。最近的 glibc 版本使得 mktime() 在 tm_isdst 与当前时区不一致时失败;尤其是在 tm_isdst = 1 且时区为 UTC 时会失败。(在我看来,这似乎与 POSIX 规定的对 struct tm 其他字段“不正确”值的处理方式大相径庭,所以我认为这是一个 bug,但他们可能会说是故意的。)这已被观察到会导致在不同时区创建的归档进行 pg_restore 时出现一些表面的问题。为了解决这个问题,使用归档中的字段值执行 mktime(),如果失败则再次尝试使用 tm_isdst = -1。这将产生一个比原始区域偏移 UTC 偏移量大的结果,但以前也是如此。这并不算非常关键,因为除了可能打印结果之外,我们不使用其结果。(将来有一天我们应该废弃整个逻辑,而是将标准格式的时间戳记录在归档中。但对于向后移植的 bug 修复来说,这还不行。)另外,通过让 initdb 的 build_time_t() 将 tm_isdst 设置为 -1 而不是 0,来保护我们唯一对 mktime() 的其他使用。这种情况只会在全年都处于 DST 的时区中出现问题;但我认为有些时区确实存在这种情况,或者将来可能会存在。根据 Wells Oliver 的报告。向所有支持的版本回溯,因为它们都可能需要与较新版本的 glibc 配合使用。讨论:https://postgr.es/m/CAOC+FBWDhDHO7G-i1_n_hjRzCnUeFO+H-Czi1y10mFhRWpBrew@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f807e3410fdfc29ced6590c7c2afa76637e001ad

  • 删除孤立的预期结果文件。这应该在 43e084197 中删除,该提交删除了相应的 spec 文件。在玩弄 isolationtester 时发现的。 https://git.postgresql.org/pg/commitdiff/ffbe9dec13599fa786ea6567df1c6a3f3ee3c673

  • 更新变体预期结果文件。这应该在 d248a229b 中更新,但被忽略了。根据添加它的 31a877f18,此文件旨在显示在 default_transaction_isolation = serializable 下得到的结果。我们在其他隔离测试中在很大程度上已经失去了这个目标,但只要我们还有这个文件,它就应该正确。在玩弄 isolationtester 时发现的。 https://git.postgresql.org/pg/commitdiff/0a1e80c5c4f094087257fc4284a87e0bc7bca591

  • 删除另一个孤立的预期结果文件。 aborted-keyrevoke_2.out 在添加时(在提交 0ac5ad513 中)似乎是需要的,以处理 serializable 事务模式的情况。然而,在 serializable 模式下的输出实际上与常规的 aborted-keyrevoke.out 文件匹配,而且据我所知,长期以来都是这样。没有必要继续维护这个变体。 https://git.postgresql.org/pg/commitdiff/f6352a0d4e437ac8bc266f77df22d064592056c9

  • 更新另一个变体预期结果文件。这应该在 533e9c6b0 中更新,但被忽略了。鉴于没有抱怨,我将不向后移植。 https://git.postgresql.org/pg/commitdiff/d3c878499c9d639ff06e0664d06b8c731e30c2fc

  • 改进一些与复制相关的代码中的 SQLSTATE 报告。我最初的目标是在 walrcv_connect() 失败时报告 ERRCODE_CONNECTION_FAILURE,但当我查看代码时,我意识到编写这段代码的人认为 errcodes 纯粹是可选的。这不符合我们项目的政策。因此,确保在每个 ereport(a)级别为 ERROR 或更高,并且(b)不是可疑的内部逻辑错误的情况下都提供 errcode。还修复了一些非常可疑的现有 errcode 分配。虽然这不符合政策,但很大程度上是表面的,因为其中很少有情况可以报告给应用程序。所以我认为没有必要向后移植。讨论:https://postgr.es/m/2189704.1623512522@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/6b787d9e32005867ee3660d1ea20f447810a403d

  • 修复 ExecuteQuery 中错误后的 plancache 引用计数泄漏。当将计划从 plancache 放入 Portal 时,不应该在 GetCachedPlan 和 PortalDefineQuery 之间有任何出错的可能性;如果发生这种情况,GetCachedPlan 增加的计划引用计数将泄漏。我在重构 9dbf2b7d7 中的代码时打破了这个规则。除了某些内存泄漏外,没有可见的后果,而且由于没有人很可能连续触发相关的错误条件,因此我们没有注意到也就不足为奇了。尽管如此,这是一个 bug,因此通过更改操作顺序来消除危险。在查找 bug #17053 的更好修复方法的过程中发现的。这个错误已经存在很久了,所以向所有支持的版本回溯。 https://git.postgresql.org/pg/commitdiff/131ea3e908d3c97a2fe1ab25cce5046dd5cb905f

  • 集中处理实用语句的保护性复制逻辑。在“简单查询”代码路径中,在解析分析或执行实用语句时修改语句的节点树是可以的,因为之后它将被丢弃。然而,如果节点树在计划缓存中,那么在后续执行中它可能会被损坏。到目前为止,我们通过让各个实用语句函数在修改树之前调用 copyObject() 来处理这个问题。但这容易遗漏。Charles Samborski 的 bug #17053 表明 CREATE/ALTER DOMAIN 没有收到这个提示,如果从计划缓存中反复执行,可能会崩溃。在向后移植的版本中,我们只会应用一个狭窄的解决方案,但在 HEAD 版本中,似乎有必要采取一种更原则性的修复方法,以消除未来发生类似错误的可能性。因此,让我们将 copyObject 的责任从子项提升到 ProcessUtility,从而确保所有实用语句类型都能得到处理。此外,修改 ProcessUtility 的 API,使其调用者可以告知它是否需要进行复制步骤。事实证明,在所有情况下,直接调用者都知道节点树是否是暂时的,因此这不会涉及大量的代码改动。通过这种方式,虽然在从缓存执行的代码路径中由于有时会复制实际上不会被修改的节点树而损失了一点性能,但我们在简单查询代码路径中通过不复制一次性使用的节点树而获得了收益。(请注意,整个问题仅适用于实用语句。可优化语句没有这个问题,因为我们很久以前就让执行器将 Plan 树视为只读的。也许有一天我们也会让实用语句的执行也这样做,但我对此并不抱太大希望。)讨论:https://postgr.es/m/931771.1623893989@sss.pgh.pa.us 讨论:https://postgr.es/m/17053-3ca3f501bbc212b4@postgresql.org https://git.postgresql.org/pg/commitdiff/7c337b6b527b7052e6a751f966d5734c56f668b5

  • 改进 pgbench 中的版本报告。提交 547f04e73 导致 pgbench 开始打印其版本号,这似乎是个好主意,但它还需要一些额外工作:* 打印服务器版本号,当它们不同时。* 打印 PG_VERSION 字符串,而不是某个重建的近似值。此补丁复制了 psql 用于此目的的经过充分测试的代码。讨论:https://postgr.es/m/1226654.1624036821@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/84bee9610965331d5110971d8de390a5bbe2effc

  • 修复 DROP OWNED BY 对重复的 polroles 条目行为不当。通常情况下,pg_policy.polroles 数组不会列出同一个角色两次;但是 CREATE POLICY 不阻止这种情况。如果我们对一个重复列出的角色执行 DROP OWNED BY,RemoveRoleFromObjectPolicy 要么会遇到断言失败,要么会遇到 tuple-updated-by-self 错误。重写它以正确处理重复条目,并添加一个 CommandCounterIncrement 调用来防止其他问题。根据讨论,这里还需要进行其他清理工作,但这似乎是最低限度的必要修复。根据 Alexander Lakhin 的 bug #17062。它一直存在问题,所以向所有支持的版本回溯。讨论:https://postgr.es/m/17062-11f471ae3199ca23@postgresql.org https://git.postgresql.org/pg/commitdiff/d21fca084356946664bfce19d66d2df2bb873cbd

  • 为 v14 中添加的 libpq 功能提供功能测试宏。我们收到一个请求,要求提供一种在编译时测试新流水线功能可用性的方法。更广泛地说,为所有新的 libpq API 功能通过 #ifdef 进行测试似乎是个好主意。人们一直在使用 pg_config.h 中的版本来进行此操作;但在越来越多的情况下,服务器版本与 libpq 版本不同,该版本更可能代表服务器版本。如果 libpq-fe.h 本身就是其功能来源的真相,那就更安全了。因此,我们建立一个政策,从 v14 开始,当我们向 libpq-fe.h 添加新的 API 时,将添加一个合适的功能存在宏。(似乎没有太大的意义去追溯应用此政策,但对于 v14 来说还不算太晚。)Tom Lane 和 Alvaro Herrera,根据 Boris Kolpackov 的建议。讨论:https://postgr.es/m/boris.20210617102439@codesynthesis.com https://git.postgresql.org/pg/commitdiff/6991e774e0304f5ef488cf1ae4fa79578b6ae3d5

  • 稳定由提交 f61db909d 添加的测试用例。Buildfarm 成员 ayu 和 tern 有时会显示与预期不同的计划。我之前一直无法重现这种情况,但今天我终于明白了。如果存在并发的开放事务(可能是 buildfarm 中的 autovacuum 运行,但这也可以手动安排),那么在几行之前的 DELETE 语句删除的行的索引条目不会立即被杀死,导致规划器对 ft2.c1 的极值估计发生变化,这足以改变“c1 > 1100”的行数估计,从而将连接计划从 nestloop 更改为 hash。为了解决这个问题,将查询条件更改为“c1 > 1000”,无论是否存在并发开放事务,都会使 hash 计划被优先选择。由于此 UPDATE 是幂等的,因此其他方面没有变化。报告:https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=ayu&dt=2021-06-09%2022%3A45%3A48 报告:https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=ayu&dt=2021-06-13%2022%3A38%3A18 报告:https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=tern&dt=2021-06-20%2004%3A55%3A36 https://git.postgresql.org/pg/commitdiff/5843659d091bfb6f2c60e010ea1fd00e55ee6ada

  • 也为简单表达式恢复 Portal 级别的快照。提交 84f5c2908 等未能覆盖 plpgsql 的“简单表达式”代码路径。如果在 COMMIT/ROLLBACK 之后执行的第一个命令是这些命令之一,而不是完整的 SPI 命令,我们必须显式调用 EnsurePortalSnapshotExists() 来确保我们有一个外部快照。请注意,仅在表达式执行期间推送快照是不够的:返回的内容可能是被 toast 过的,所以最好有一个快照来保护它。演示此事实的测试用例通过将 SQL 函数标记为 immutable 来作弊,即使它从表中获取数据。但这也不是用户从未做过的事情。根据 Jim Nasby 的报告。向 v11 回溯,与之前的修复相同。讨论:https://postgr.es/m/378885e4-f85f-fc28-6c91-c4d1c080bf26@amazon.com https://git.postgresql.org/pg/commitdiff/d102aafb6259a6a412803d4b1d8c4f00aa17f67e

  • 使用注解来减少隔离测试结果的不稳定性。我们长期以来一直在应对不稳定隔离测试结果的问题。一些测试脚本插入了长时间的延迟来试图强制稳定的结果,这并不是很理想;但其他一些不可预测的失败模式仍然存在,导致 buildfarm 出现不可重现的失败。我已经花费了大量时间试图通过改进服务器端支持代码来解决这个问题,但效果不佳:这种方法根本无法应对源于不同服务器进程消息到达顺序的差异。然而,我们可以通过注解测试脚本本身来改进客户端方面,以显示可能以不同顺序发生的事件的期望报告顺序。此补丁添加了三种类型的注解来处理(a)可能完成其等待或不完成其等待,然后 isolationtester 才能看到它们等待的测试步骤;(b)不同会话中可以按任何顺序合法完成的测试步骤;以及(c)可能在另一会话的步骤完成之前或之后到达的 NOTIFY 消息。我们以后可能需要更多类型的注解,但这似乎足以应对我们在 buildfarm 中看到的不稳定性。它还让我们能够摆脱之前使用的所有长时间延迟,从而将隔离测试的运行时间缩短一分钟以上。向所有支持的分支回溯,因为 buildfarm 的不稳定性影响了所有分支,而且保持所有分支的 isolationtester 功能相同以简化未来可能的测试回溯是有益的。讨论:https://postgr.es/m/327948.1623725828@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/741d7f1047fe52da7ced6fa9cea661ce9320c8d4

  • 改进隔离测试中查询结果的显示。以前,isolationtester 使用一些临时代码显示 SQL 查询结果,这些代码显然没有花费太多精力。字段值超过 14 个字符时不会与其他字段分隔,通常还会导致列不对齐。此外,查询结果与后续 isolationtester 输出之间没有视觉分隔。这使得测试结果文件混乱且难以阅读。为了改善这种情况,让我们使用 libpq 的 PQprint() 函数。虽然 psql 早已不再使用它,但在这里的目的来说它仍然足够好。与 741d7f104 类似,向所有支持的分支回溯,因此这不会成为回溯隔离测试更改的障碍。讨论:https://postgr.es/m/582362.1623798221@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/4a054069a36032a59afceb07f3b837f09ab1a2e9

  • 不要假定 GSSAPI 结果字符串以 null 结尾。我们对 gss_display_status() 和 gss_display_name() 的使用假定这些函数返回的 gss_buffer_desc 字符串是以 null 结尾的。到目前为止,由于没有收到抱怨,它们似乎通常是这样。然而,可用的文档并没有保证这一点,并且一些 gss_display_status() 的 man 页显示了依赖于 gss_buffer_desc.length 字段而不是期望 null 终止的示例。此外,我们现在收到报告称,在某些实现中,clang 的地址消毒器认为指定长度之后的字节是未定义的。因此,将代码更改为依赖于 length 字段。这可能更多是表面上的修复,而不是修复任何实际的 bug,但很难确定,所以向所有支持的分支回溯。顺便说一下,还将 v12 的更改回溯到,这些更改使得 pg_GSS_error 能够诚实地处理从 gss_display_status 获取的多个消息。根据 Sudheer H R 的报告。讨论:https://postgr.es/m/5372B6D4-8276-42C0-B8FB-BD0918826FC3@tekenlight.com https://git.postgresql.org/pg/commitdiff/126cdaf47af275f76b2f2ddb023bfdc6f018ae30

  • 文档:修复 CREATE FUNCTION 等命令语法摘要中 LEAKPROOF 的混淆。CREATE FUNCTION 及相关命令的语法摘要显示 LEAKPROOF 似乎是 IMMUTABLE/STABLE/VOLATILE 的替代项,而实际上它是一个独立的选择项。对此进行改进。根据 aazamrafeeque0 的抱怨。感谢 David Johnston 的建议。讨论:https://postgr.es/m/162444349581.694.5818572718530259025@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/2031e1668e5577e64cfed29da69a34903d5a5227

  • 允许将非引号标识符用作隔离测试的会话/步骤名称。出于不明原因,isolationtester 一直坚持要求会话和步骤名称必须用双引号括起来。这相当繁琐,而且对测试的可读性帮助不大,尤其因为人们实际选择的名称几乎总是看起来像普通标识符。因此,让我们调整词法分析器,允许使用类似于 SQL 的标识符,而不仅仅是双引号字符串。(它们是类 SQL 的,而不是完全的 SQL,因为我没有添加任何大小写折叠逻辑。也没有提供 U&"..." 名称的规定,尽管没有人会关心。)此更改引入了一个不兼容性:如果您写 "foo""bar" 而没有空格,以前会被视为两个标识符,但现在它只是一个包含嵌入式引号的标识符。我已经将 src/test/isolation/ 中的所有 specfile 转换为了删除不必要的双引号,但仅此而已,因为我的眼睛已经开始发花。与 741d7f104 类似,向所有支持的分支回溯,因此这不会成为回溯隔离测试更改的障碍。讨论:https://postgr.es/m/759113.1623861959@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/a443c1b2d6a646cf90a8afc193c07ed12a2bf045

  • 进一步稳定 postgres_fdw 测试。涉及 ft1_nopw 的查询不再稳定地返回相同的行。我推测,在 f61db909d/5843659d0 引入的更新之后, autovacuum 命中了“S 1”。“T 1”,释放了一些空间,改变了后续插入的存储位置。然而,直到现在这些结果才稳定,这仅仅是运气好,因为没有 ORDER BY 的 LIMIT 没有明确定义,而且我们在这个测试脚本中从未将该表视为仅追加表。由于我们只关心这些命令是否成功,所以只需将 `SELECT *` 替换为 "SELECT 1"。报告:https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=crake&dt=2021-06-23%2019%3A52%3A08 https://git.postgresql.org/pg/commitdiff/802177090992511c610804da54a4603d4f50c594

  • 文档:从 v14 版本说明中删除提交 f560209c6。现在它已经被向后移植,它不再是 v14 的新功能。 https://git.postgresql.org/pg/commitdiff/8a80562d732c0da1ddcc9fb88dfb976f4b846577

  • 删除 RemoveRoleFromObjectPolicy() 中不必要的失败情况。该函数实际上不需要打开或锁定其正在修改的 pg_policy 条目关联的 relation。它对 rel 进行的错误检查反而适得其反(例如,如果我们不想允许在系统目录上安装策略,这里不是阻止它的地方)。特别是,坚持所有权检查似乎是错误的。这实际上迫使用户为 DROP OWNED BY 使用超级用户,这肯定不是我们想要的效果。此外,重建策略表达式的依赖项也没有意义,因为它们没有被更改。最后,锁定表也似乎适得其反;它无助于防止竞争条件,因为我们在获取锁后未能重新读取 pg_policy 行。这意味着并发 DDL 可能会导致“tuple concurrently updated/deleted”错误;这与该代码将产生的行为相同,但开销更小。根据对 bug #17062 的讨论。向所有支持的版本回溯,因为此处移除的失败情况在 9.6 版本和 HEAD 版本中似乎同样不受欢迎。讨论:https://postgr.es/m/1573181.1624220108@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/5a0f1c8c0193f0dd7fba50c22d96781fa2414007

  • 删除 libpq 对 stringinfo.c 中不必要的依赖。提交 c0cb87fbb 不明智地在 fe-connect.c 中引入了对 StringInfo 机制的依赖。我们不能在 libpq 中使用它,因为它会在 OOM 时触发 summary exit(1),而这对于通用库来说是不合适的行为。允许服务文件中任意行长度的目标似乎不值得付出太多努力,因此我们恢复到以前的方法,即使用堆栈分配的缓冲区并在缓冲区溢出时失败。但这并不是一个完全的恢复。我保留了该补丁的重构,使其只有一个退出路径,这似乎比每个错误路径都知道如何清理更清晰。此外,我将固定大小的缓冲区设置为 1024 字节而不是 256 字节,只是为了推迟需要可扩展缓冲区的时间。这里还有很多工作要做;特别是,目前缺乏对这种错误的任何机械检查似乎相当危险。但这个修复使我们恢复到 v13 的健壮性水平。讨论:https://postgr.es/m/daeb22ec6ca8ef61e94d766a9b35fb03cabed38e.camel@vmware.com https://git.postgresql.org/pg/commitdiff/8ec00dc5cd70e0e579e9fbf8661bc46f5ccd8078

  • 文档:更新 v14 版本说明以恢复提交 c0cb87fbb。 https://git.postgresql.org/pg/commitdiff/dcffc9ba8a1e0ab1b0a57e9b9d38e3dc9960f83f

  • 清除 isolationtester 中的内存泄漏。specscanner.l 每次扫描 spec 文件中的 token 会泄漏一千字节内存。显然有人认为开头的代码块只会执行一次;但它是在每次调用 yylex() 时都执行的。isolationtester.c 中的几个函数由于没有释放一次性分配而泄漏了少量内存。最好改进这些,以便 valgrind 能够给该程序一个干净的健康证明。还删除了一个丑陋的静态变量。Coverity 抱怨了一次性泄漏之一,这促使我尝试用 valgrind 对 isolationtester 进行检查,从而发现了更大的泄漏。 https://git.postgresql.org/pg/commitdiff/642c0697c96b9c6ba5d194653a329f7820565f01

Michaël Paquier 提交

Bruce Momjian 已推送

Álvaro Herrera 提交

Noah Misch 推送

Amit Kapila 提交

Alexander Korotkov 提交了

Peter Geoghegan 提交

Andrew Dunstan 推送

Heikki Linnakangas 提交

  • 修复 WAL 文件搜索位置的过时注释。自提交 c24dcd0cfd 以来,我们一直使用 pg_pread() 读取 WAL 文件,这不会改变搜索位置(除非回退到 src/port/pread.c 中的实现)。相应地更新注释。回溯到:12,从那时开始使用 pg_pread() https://git.postgresql.org/pg/commitdiff/d0303bc8d2670d11c9df9220aa08a2c33529e100

  • 整理 GetMultiXactIdMembers() 在错误时的行为。其中一个错误路径使 `*members` 未初始化。这不是一个活跃的 bug,因为大多数调用者在函数返回 -1 时不查看 `*members`,但让我们保持整洁。一个调用者 heap_lock_tuple() 会执行 "if (members != NULL) pfree(members)",但据我所知,它从未传递无效的 'multi' 值,因此不应该达到该错误情况。调用者在期望上也有些不一致。heap_lock_tuple() 在 members 不为 NULL 时 pfree 'members' 数组,其他调用者在 "nmembers >= 0" 时 pfree,还有一些在 "nmembers > 0" 时 pfree。这也不是活跃的 bug,因为该函数不应返回 0,但在此处添加一个 Assert 以使其更清晰。我现在将调用者单独处理。我还移动了设置 `*nmembers` 的行。以前也没有错,但我喜欢将其放在 return 语句旁边,以清楚地表明它在返回时始终被设置。还删除了 ereport(ERROR) 后一个无法到达的 return 语句,以求简洁并与紧随其后的类似 if 块保持一致。作者:Greg Nancarrow,并由我进行了附加更改。回溯到:9.6,所有支持的版本。 https://git.postgresql.org/pg/commitdiff/d24c5658a80c8f5037e9e1948de311d3f3350f12

  • 防止读取 relmapper 文件时出现竞争条件。与这里的注释相反,POSIX 不保证 read() 的原子性,如果另一个进程并发调用 write()。至少 Linux 是这样。向 load_relmap_file() 添加锁定以避免竞争条件。修复 bug #17064。感谢 Alexander Lakhin 的报告和测试用例。回溯到:9.6,所有支持的版本。讨论:https://postgresql.ac.cn/message-id/17064-bb0d7904ef72add3@postgresql.org https://git.postgresql.org/pg/commitdiff/b6d8d2073f228d9f7198f1f9826d8f6ab643c219

  • 再次修复 relmapper 竞争条件。在之前的提交中,我忽略了 relmap_redo() 也未获取 RelationMappingLock。感谢 Thomas Munro 指出这一点。回溯到:9.6,与之前的提交相同。讨论:https://postgresql.ac.cn/message-id/CA%2BhUKGLev%3DPpOSaL3WRZgOvgk217et%2BbxeJcRr4eR-NttP1F6Q%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/9b8ed0f52bffceaccf6fa650ffe482e7da20fbf2

Tomáš Vondra 提交了

  • 修复将数据复制到具有 FDW 批处理的插槽中。提交 b676ac443b 优化了具有批量插入外表元组的插槽处理,以便插槽只初始化一次并为所有批次重用。然而,数据是在初始化后才复制到插槽的,当插槽被重用时会导致重复插入值。通过将 ExecCopySlot 移出 init 分支来修复。现有的 postgres_fdw 测试未能捕获此问题,因为它们在没有唯一索引的情况下将数据插入外表,然后只检查插入的行数。这添加了一个新的测试,该测试既包含唯一索引,又包含对插入值的检查。报告者:Alexander Pyhalov 讨论:https://postgr.es/m/7a8cf8d56b3d18e5c0bccd6cd42d04ac%40postgrespro.ru https://git.postgresql.org/pg/commitdiff/99cea49d6525e30bc3768e4ffb95377e7584dea1

Fujii Masao 提交

Peter Eisentraut 提交

David Rowley 提交

  • 修复 expand_grouping_sets 中的断言失败。如果给定指针的类型不是指定的类型,linitial_node() 会在启用断言的构建中失败。这里类型是 IntList。代码认为它应该期望 List,但它是错误的。在运行此代码的现有测试中,初始列表元素始终是 NIL。由于 linitial_node() 允许 NULL,我们在现有的回归测试中并未触发任何断言失败。关于是否需要在此区域进行更多测试仍有一些讨论,但目前,由于 beta2 即将到来,先修复 bug。Bug:#17067 讨论:https://postgr.es/m/17067-665d50fa321f79e0@postgresql.org 报告者:Yaoguang Chen https://git.postgresql.org/pg/commitdiff/8d29d45d9b3cab95a866efbcdd9138b3d76741b3

Andres Freund 提交

Joe Conway 已推送

Thomas Munro 推送

待处理补丁

Nitin Jadhav 提交了一份补丁的另一个修订版,该补丁旨在提供一种跟踪启动过程中操作进度的途径。

Yuzuko Hosoya 提交了一个补丁,通过新的 GUCs autovacuum_analyze_attach_partition、autovacuum_analyze_detach_partition 和 autovacuum_analyze_drop_partition 来控制是否对分区操作运行 autoanalyze。

Peter Eisentraut 提交了一个补丁,向 DECLARE_INDEX 添加了索引 OID 宏参数。不再显式定义 AmOidIndexId 等符号,而是将其作为 DECLARE_INDEX() 的参数,并让 genbki.pl 从 CATALOG() 声明中生成表 OID 符号的方式。

Filip Gospodinov 提交了一个补丁,旨在修复一个 bug,该 bug 表现为 shipped 的 pkg-config 文件对于静态链接 libpq 是损坏的,因为缺少 libpgcommon 和 libpgport。修复添加了这两个缺失的私有依赖项。

Heikki Linnakangas 提交了补丁的另一个修订版,将 xlog.c 分割为 xlog.c 和 xlogrecovery.c。这会将与执行 WAL 恢复相关的函数移到新的 xlogrecovery.c 源文件中,使 xlog.c 负责维护 WAL 缓冲区,协调启动以及从恢复切换到正常操作,以及其他一直存在于 xlog.c 中的杂项工作。

Greg Nancarrow 提交了补丁的两个修订版,以移除 BIGINT 序列 MINVALUE/MAXVALUE 值上无用的 int64 范围检查。

Peter Geoghegan 提交了补丁的三个修订版,为“git blame”添加了可忽略的 pgindent 提交列表。

David Rowley 提交了补丁的另一个修订版,添加了一种新的哈希表类型,该类型具有稳定的指针,并利用它来加速 SMgr。

Peter Smith 和 Ajin Cherian 交换了补丁,为内置逻辑复制添加了对准备事务的支持选项。

Daniel Gustafsson 和 Michaël Paquier 交换了补丁,记录了一些 SSL/TLS 相关的缩略语,并将 SSL 的用法替换为 SSL/TLS,后者更准确和最新。

Simon Riggs 提交了补丁的三个修订版,为哈希索引添加了一个文档章节。

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

Li Japin 提交了一个补丁,对 RelationGetIdentityKeyBitmap 中的代码进行了一些小的美化。

Bertrand Drouvot 提交了补丁的另一个修订版,以在 standby 上启用最小逻辑解码。

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

Peter Eisentraut 提交了一个补丁,使 Unicode makefile 更具并行安全性,使 UCS_to_most.pl 按排序顺序处理编码,移除生成 C 输出中的一些空白以使其与项目其余部分的编码风格保持一致,简化代码生成代码,并修复生成输出中的缩进。

Maxim Orlov 提交了补丁的另一个修订版,以修复并行 worker 失败的断言和 core dump。

Vigneshwaran C 提交了两个修订版的补丁,为 PUBLICATION 添加了模式级别支持。

Mike Fiedler 提交了一个补丁,用于在 post-copy 输出中发出命名空间。

Emre Hasegeli 提交了一个补丁,用于将操作符类与索引访问方法解耦。

Jacob Champion 提交了补丁的两个修订版,将 SASL 框架与 SCRAM 代码解耦,因为它们可能单独有用。

Yugo Nagata 提交了补丁的另一个修订版,通过为客户端变量使用 Variables 结构来解决一些 Pgbench 错误。当在序列化/死锁失败后重复事务时重置客户端变量时,这一点最为重要。不要一个一个地分配 Variable 结构。相反,每次溢出时添加一个固定的余量。还包括了一个修复 pgbench 错误和序列化/死锁重试的补丁。

Jacob Champion, Michaël Paquier 和 Tom Lane 交换了补丁,使得 libpq 可以使用 jsonapi。

Gurjeet Singh 提交了一个补丁,用于为顶级事务 ID 添加自动通知。

Haiying Tang 提交了补丁的另一个修订版,以支持 psql 中对大写输入的查询结果进行制表符补全。

Peter Eisentraut 提交了一个补丁,通过缩短主要错误消息并更直接地说明尝试的内容不可能,从而使关于 relkind 不匹配的错误消息更有用。

Daniel Gustafsson 提交了补丁的另一个修订版,以支持 NSS 作为 libpq 的 TLS 后端。

Andrey V. Lepikhov 提交了一个补丁,告知 genericcostestimate() 的索引选择性值,在唯一单行 btree 索引的情况下,只能返回一个行。

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

Ranier Vilela 提交了一个补丁,用于修复 src/backend/commands/subscriptioncmds.c 中的未初始化 copy_data 变量。

Peter Eisentraut 提交了一个补丁,使关于 relkind 不匹配的错误消息更具信息性,通过缩短主要错误消息并更直接地说明尝试的内容不可能。

Peter Eisentraut 提交了一个补丁,为 UNBOUNDED 语法歧义添加测试。

Simon Riggs 提交了一个补丁,使 pgbench 使用 COPY FREEZE。

Justin Pryzby 提交了一个补丁,用于避免双括号,并修复 tablefunc.c 中的注释以引用正确的注释。

Craig Ringer 提交了一个补丁,向 Windows 尚未公开的一些功能添加了更多的 PGDLLIMPORT。

Amit Kapila 提交了一个补丁,允许在 speculative aborts 后流式传输更改。

Hayato Kuroda 提交了一个补丁,使 ECPG 的新 DECLARE STATEMENT 适用于 DEALLOCATE 和 DESCRIBE。

Bruce Momjian 提交了补丁的另一个修订版,实现了集群文件加密。

Jie Zhang 提交了一个补丁,使生成的示例 postgresql.conf 与 `shared_buffers` 的默认值保持一致。

Richard Guo 提交了一个补丁,用于在反连接中将每个 rel 作为外连接和内连接使用。

Tom Lane 提交了一个补丁,以防止在 libpq 内部调用 abort() 或 exit()。

Alexander Korotkov 提交了一个补丁,用于修复 multirange 操作符的 catalog 定义中的一些小不一致之处。

Julien Rouhaud 提交了补丁的另一个修订版,在生成 const 节点时保留 param 位置。

Andrey Borodin 提交了补丁的另一个修订版,重新组织了 pglz 压缩代码。

Julien Rouhaud 和 Ranier Vilela 交换了补丁,添加了一个 pg_get_query_def() 来反解析和打印重写的 SQL 语句。

Tomáš Vondra 提交了一个 PoC 补丁,用于使用运行时采样进行基数估计。