pgCluu 3.2,一个用于审计 PostgreSQL 性能的 Perl 程序,已发布。
PGroonga 2.3.2,一个支持所有语言的全文搜索平台,已发布。
https://archives.postgresql.org/pgsql-jobs/2021-10/
Planet PostgreSQL:https://planet.postgresql.org/
本周 PostgreSQL 周报由 David Fetter 提供。
请在太平洋标准时间(PST8PDT)周日晚上3:00之前将新闻和公告发送至 david@fetter.org。
Michaël Paquier 提交
修复了在 2PC 过程中热备节点提升时快照构建的问题。在涉及 2PC 事务的恢复结束时会执行一些特定逻辑:1) 调用 RecoverPreparedTransactions(),将 2PC 事务的状态恢复到内存中(重新获取锁等)。2) 调用 ShutdownRecoveryTransactionEnvironment(),恢复到正常操作,主要是清理恢复锁和 KnownAssignedXids(包括先前跟踪的任何 2PC 事务)。3) 将 XLogCtl->SharedRecoveryState 切换到 RECOVERY_STATE_DONE,这是任何调用 RecoveryInProgress() 的进程检查集群是否仍在恢复中的临界点。在步骤 2) 和 3) 之间拍摄的任何快照都将是空的,这可能导致依赖于此时快照的任何事务损坏数据,因为在同一次事务中连续调用 GetSnapshotData() 时,RecentXmin 可能会向后移动。由于 SharedRecoveryState 是判断是否可以安全丢弃 KnownAssignedXids 的关键点,因此此提交将步骤 2) 移到了步骤 3) 之后,这样我们就不会出现空快照的情况。这个问题自热备引入以来就存在,因此需要回溯所有版本。出现错误快照的窗口期非常短,但我通过运行 023_pitr_prepared_xact.pl 发现了它,buildfarm 成员 fairywren 也发现了。Thomas Munro 也独立发现了这个问题。特别感谢 Andres Freund 花时间分析这个问题。报告者:Thomas Munro,Michael Paquier 分析者:Andres Freund 讨论:https://postgr.es/m/20210422203603.fdnh3fu2mmfp2iov@alap3.anarazel.de 回溯至:9.6 https://git.postgresql.org/pg/commitdiff/8a4237908c0fe73dd41d4d7c7a6314f17dfd7a6f
修复 pg_verifybackup 的 TAP 测试中的警告。a3fcbcd 中的疏忽。报告者:Thomas Munro 讨论:https://postgr.es/m/CA+hUKGKnajZEwe91OTjro9kQLCMGGFHh2vvFn8tgHgbyn4bF9w@mail.gmail.com 回溯至:13 https://git.postgresql.org/pg/commitdiff/ec2133a447318ac6d78887e91940d69e6d92a435
重构日志收集器的每个目标文件轮换。stderr 和 csvlog 在按大小、按年龄轮换文件或被用户强制请求(pg_ctl logrotate 或 SQL 函数 pg_rotate_logfile)时,使用了重复的代码。两者之间的主要区别在于,stderr 需要始终打开其文件,以便在日志收集器尚未准备好执行其工作时,如果启用了其他目标,仍然可以路由。此外,如果禁用了 csvlog,我们需要正确关闭其存储在日志收集器中的元数据(current_logfiles 的最后一个文件名以及正在使用的文件描述符)。除了这些点之外,在错误处理以及是否应创建文件或继续使用现有文件方面,代码是相同的。此更改总体上使代码更简单,并将有助于引入更多基于文件的日志目标。此重构与 5b0b699 中的工作类似。大部分重复源自 fd801f4。pg_ctl 的一些 TAP 测试会检查强制日志轮换的情况,但这有些局限,因为它没有覆盖 log_rotation_age 或 log_rotation_size(这些可能不值得花费额外的资源运行),也没有覆盖具有不同 stderr 和 csvlog 组合的 log_destination 重载。我在此重构中单独测试了所有这些情况。作者:Michael Paquier 讨论:https://postgr.es/m/CAH7T-aqswBM6JWe4pDehi1uOiufqe06DJWaU5=X7dDLyqUExHg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/5c6e33f071537d9831db57471a06d39a175b535a
修复 syslogger.c 中的编译警告。5c6e33f 中的疏忽。作者:Nathan Bossart 讨论:https://postgr.es/m/DD8AD4CE-63B7-44BE-A3D2-14A4E4B19C26@amazon.com https://git.postgresql.org/pg/commitdiff/05c4248ad1bf0c2721ce9445f6908da9ece36ff8
重构 csvlog 的 stderr 回退,以更好地处理 WIN32 服务情况。send_message_to_server_log() 在某些情况下会强制将 csvlog 的日志条目重定向到 stderr,例如 syslogger 尚未准备好。如果发生这种情况,csvlog 将回退到 stderr 来记录一些信息,而不是什么都不记录。代码的组织方式是先处理 stderr,然后处理 csvlog,csvlog 通过反向条件检查 stderr 是否尚未发生。使用这种代码组织方式,在 WIN32 上将 Postgres 作为服务运行时,可能会丢失一些消息,因为没有可用的 stderr,并且由于这个原因,StringInfoData(保存 stderr 消息)的处理相当令人困惑。此提交将 csvlog 的处理移到 stderr 之前,因为我们可以追踪是否需要将某条信息记录到 stderr。这将 stderr 的处理减少到单一代码路径,并为 WIN32 服务添加了回退到事件日志的功能。这还简化了我们处理 stderr 的 StringInfoData 的方式,使得集成新的基于文件的日志目标更容易。我在检查此更改时,在 Windows 上对服务和事件日志进行了操作。审稿人:Chris Bandy 讨论:https://postgr.es/m/YV0vwBovEKf1WXkl@paquier.xyz https://git.postgresql.org/pg/commitdiff/8b76f89c37973082b3d64f5a27937efcca9d65f6
Daniel Gustafsson 提交
将 InvalidXid 的用法替换为 InvalidTransactionId。虽然 Xid 是 TransactionId 的缩写,但 InvalidXid 在代码中并未定义。修复了错误使用较短版本名称的注释。作者:Bharath Rupireddy bharath.rupireddyforpostgres@gmail.com 讨论:https://postgr.es/m/CALj2ACUQzdigML868nV4cojfELPkEzNLNOk7b91Pho4JB90fng@mail.gmail.com https://git.postgresql.org/pg/commitdiff/941921b875c7710e2b070c02c7819f2510808fdd
如果 TAP 测试未启用,则提供错误提示。在未配置 --enable-tap-tests 的树中运行 TAP 测试的错误消息非常简短,可以为新入职的开发者提供更多帮助。此处添加了一个小提示,说明如何在这些情况下运行测试。作者:Kevin Burke kevin@burke.dev 讨论:https://postgr.es/m/CAKcy5ejKVYwUXguQcd6i9KHDm7cM7FzjQ+aayaPveoa_woyQpQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/b5cb4db91327c2cef66207bde9cbcb592b91f93c
在构建 libpq 时,在 exit() 检查方面提供错误提示。提交 dc227eb82 引入了对 libpq 的限制,即不允许调用任何调用 exit() 的函数。在 e45b0dfa1f、2f7bae2f92 和 792259591 中进一步完善和修复了这一点。虽然这在 Makefile 中有详细记录,但当检查失败时发出的错误消息非常简短,对于没有先前背景的新开发人员来说,没有提供任何提示。此处添加了一个错误提示,以帮助新开发人员入职 PostgreSQL。作者:Rachel Heaton rheaton@vmware.com 合作作者:Jacob Champion pchampion@vmware.com 讨论:https://postgr.es/m/CADJcwiVL20955HCNzDqz9BEDr6A77pz6-nac5sbZVvhAEMijLg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e9bc0441f1446f6614fa6712841acec91890e089
修复注释中的重复单词。移除代码注释中意外重复的单词。作者:Dagfinn Ilmari Mannsåker ilmari@ilmari.org 讨论:https://postgr.es/m/87bl45t0co.fsf@wibble.ilmari.org https://git.postgresql.org/pg/commitdiff/7111e332c57ddb562d0ce26a4e08761a0baafb65
修复 libpq 中捕获 exit() 调用的检查。提交 e9bc0441f 为 libpq 的 exit() 检查添加了 errorhint,但意外地将 nm 命令从 -A 改为 -a。这些选项足够相似,可以隐藏在测试中,但 -a 也可以显示调试符号,这也不是我们想要的。通过将检查恢复为使用 -A 来修复。报告者:Anton Voloshin a.voloshin@postgrespro.ru 讨论:https://postgr.es/m/bd2c8409-d6b3-5de9-ba0f-40c1381f630f@postgrespro.ru https://git.postgresql.org/pg/commitdiff/de744e9efbc55288572d1e81168c74ea85a4b90a
Peter Eisentraut 提交
更新 Unicode 映射文本文件。有几个较新的可用。没有功能性差异,但我们还是将它们包含进来,这样下次有人想在这个领域进行实际工作时就不会有意外的 diff。 https://git.postgresql.org/pg/commitdiff/ce27c8953e8e48c69c690c0e5795cde40ed59fd2
使 Unicode makefile 并行安全。修复规则,使每个规则都并行安全,使用我们在这棵树中用于生成多个输出文件的规则的相同技巧。重构整个 makefile 以减少重复。讨论:https://postgresql.ac.cn/message-id/18e34084-aab1-1b4c-edd1-c4f9fb04f714%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/e752727195798c324e769cfebf9dc4baa1c6bb0c
修复循环变量符号。 https://git.postgresql.org/pg/commitdiff/ba216d3b54ac334729c505ec8a725db3826290a2
改进文件中的顺序。将 PublicationTable 新节点的所有支持函数移到文件中更合理的位置。 https://git.postgresql.org/pg/commitdiff/d942887039a608c91084a942fe10571c6f6be35a
Tom Lane 提交
文档:修复 GiST 支持函数文档中的小问题。gist.sgml 和 xindex.sgml 没有完全更新以支持 sortsupport 支持函数(提交 16fa9b2b3)。xindex.sgml 还遗漏了 compress 和 decompress 支持函数是可选的,这是一个明显更早的疏忽。顺便,修复了措辞和大小写中的随意不一致。E. Rogov 注意到。回溯到 v14;在此之前的剩余问题不值得处理。讨论:https://postgr.es/m/163335322905.12519.5711557029494638051@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/36d1a848a86afd2855215af2a112b9bde999354a
进一步更新我们的 Windows 时区名称映射。根据讨论,我们应该忠实地遵循 CLDR 的默认区域映射。这里有两个明确的改进:* 将“Greenwich Standard Time”映射到 Atlantic/Reykjavik 比使用伦敦更合适,因为冰岛自 1968 年以来就没有实行夏令时,所以这更接近人们的期望。* 由于“Samoa”区域被指定为 UTC+13:00,我们必须将其映射到 Pacific/Apia 而不是 Pacific/Samoa;后者指的是美属萨摩亚,它现在在日期变更线的另一侧。其余的更改看起来是选择了人口最多的 IANA 区域作为代表。无论细节如何,我们都将说“如果你不喜欢这个映射,请向 CLDR 投诉”。讨论:https://postgr.es/m/3266414.1633045628@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/c1aa3b3c0d2125cb04df8ed0387448d8aeb9519c
文档:改进 UNION/INTERSECT/EXCEPT 语法描述。queries.sgml 没有提到 INTERSECT 比 UNION 或 EXCEPT 绑定更紧密这个非常重要的点。我认为还可以增加对这些结构中括号作用的讨论。根据 Christopher Painter-Wakefield 的抱怨。讨论:https://postgr.es/m/163338891727.12510.3939775743980651160@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/f3fec23dbdead113700fb1b401b681fa24f1e4f4
文档:改进 timezone/README 中跟踪 Windows 区域的配方。我们现在应该引用 CLDR 作为区域名称映射的主要参考。讨论:https://postgr.es/m/3266414.1633045628@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/db692b0c84908b4ef5ea4c15fa2d742582ad2cf9
修复 postgres_fdw 的 conversion_error_callback 中的空指针崩溃。提交 c7b7311f6 调整了 conversion_error_callback,使其始终使用来自查询的 rangetable 的信息,以避免在已失败的事务中进行目录查找。然而,由于 make_tuple_from_result_row 的文档极度不足,我未能意识到 fsstate 在某些上下文中可能是 NULL。这导致在这种上下文中的转换错误会导致崩溃。通过在 fsstate 为 NULL 时回退到先前的编码来修复。同时改进了注释。根据 Andrey Borodin 的报告。回溯到 9.6,与之前的补丁相同。讨论:https://postgr.es/m/08916396-55E4-4D68-AB3A-BD6066F9E5C0@yandex-team.ru https://git.postgresql.org/pg/commitdiff/3071bbfe44f36019710190a9273ad2bd4a947878
plperl:更新 ppport.h 以支持 Perl 5.34.0。还应用了运行 perl ppport.h --compat-version=5.8.0 所建议的更改,并删除了不再需要的 NEED_foo 声明。Dagfinn Ilmari Mannsåker 讨论:https://postgr.es/m/87y278s6iq.fsf@wibble.ilmari.org https://git.postgresql.org/pg/commitdiff/05798c9f7f08908bdd06c82d934da67535b72005
调整 configure 使其强制要求 Perl 版本 >= 5.8.3。以前它只检查版本 >= 5.8.0,尽管文档自提交 dea6ba939 起就一直说最低版本是 5.8.3。根据该提交之前的讨论,我(tgl)故意保留了这一点,因为当时可以使用 5.8.0 做一些最基本的事情。但我们实际上并没有在比 5.8.3 更旧的版本上进行测试,所以谁知道是否仍然如此。不太可能有人关心,所以让我们让 configure 的版本检查与文档匹配。Dagfinn Ilmari Mannsåker 讨论:https://postgr.es/m/87y278s6iq.fsf@wibble.ilmari.org 讨论:https://postgr.es/m/16894.1501392088@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/92e6a98c3636948e7ece9a3260f9d89dd60da278
同时更新 test/perl/README 以强制要求 Perl 版本 >= 5.8.3。Daniel Gustafsson 注意到的上一提交中的疏忽。讨论:https://postgr.es/m/87y278s6iq.fsf@wibble.ilmari.org https://git.postgresql.org/pg/commitdiff/93fb39eca643a33dd6e3c8818fc7899aa67a8103
文档:更新我们关于最低推荐 AIX 版本的声明。我们目前有 buildfarm 成员测试回溯到 AIX 7.1,但在此之前没有,并且旧的 AIX 版本早已不再受 IBM 支持。因此,我们声明 7.1 是支持的最旧版本。讨论:https://postgr.es/m/87y278s6iq.fsf@wibble.ilmari.org https://git.postgresql.org/pg/commitdiff/08e2daf06c71881415ebd19105a8fe53f6eb2f8f
文档:改进 ^@ starts-with 运算符的描述。该运算符从未正式记录在任何地方。为了给它一个自然的归宿,将 functions-string-other 表重新标记为“其他字符串函数和运算符”,这实际上与 functions-string-sql 表更平行。同时,添加了对模式匹配和文本搜索部分的交叉引用。人们可能会从这些部分找到这个运算符,这似乎是合理的(但我不想在这些表中实际列出它们)。讨论:https://postgr.es/m/CADT4RqB13KQHOJqqQ+WXmYtJrukS2UiFdtfTvT-XA3qYLyB6Cw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/2ae5d72f004f599c351ee31e8da5fb3e40303760
Andres Freund 提交
windows:定义 WIN32_LEAN_AND_MEAN 以加快编译速度。windows.h 包含了许多其他头文件,显著减慢了编译速度。WIN32_LEAN_AND_MEAN 稍微减少了这一点。最好是从如此中心的位置移除对 windows.h(以及其间接包含)的引用,但在此之前……讨论:https://postgr.es/m/20210921193035.pqzay43vpyv7in43@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/8162464a25e5314e753c580389f76a9b7f69445b
修复 TestLib::slurp_file() 在 windows 上的偏移量问题。3c5b0685b921 使用 setFilePointer() 设置文件句柄的位置,但传递了错误的文件句柄,总是将位置留在 0。与其仅仅修复它,不如移除 setFilePointer() 的使用,我们现在有一个 perl 文件描述符,所以可以直接使用 perl 的 seek()。此外,perl 文件句柄没有关闭,只有 windows 文件句柄关闭了。审稿人:Andrew Dunstan andrew@dunslane.net 作者:Andres Freund andres@anarazel.de 讨论:https://postgr.es/m/20211003173038.64mmhgxctfqn7wl6@alap3.anarazel.de 回溯:9.6-,与 3c5b0685b921 相同 https://git.postgresql.org/pg/commitdiff/2f74db1236fe83e6665e5b0ddad4454c69495614
Bruce Momjian 已推送
Fujii Masao 提交
psql:改进 LOCK TABLE 的制表符补全。此提交使 psql 支持 LOCK TABLE 命令的 ONLY 和 NOWAIT 关键字的制表符补全。作者:Koyu Tanigawa 审稿人:Shinya Kato,Fujii Masao 讨论:https://postgr.es/m/a322684daa36319e6ebc60b541000a3a@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/0b0d277c35533baecc8d1a9356f71de5f2ee0bd8
文档:记录 pg_encoding_to_char() 和 pg_char_to_encoding()。以前这两函数在文档中都没有描述。但由于它们自 7.0 版本以来一直存在,并且在系统目录(如 pg_database)的描述中被提及,因此添加简短描述是合理的。作者:Ian Lawrence Barwick 审稿人:Laurenz Albe,Fujii Masao 讨论:https://postgr.es/m/CAB8KJ=infievn4q1N4X7Vx8w4_RMPPG0pLvxhSDjy5WQOSHW9g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f6b5d05ba9a4ac7c5ebec76045c6e0afcf7c9eec
在发现无效页头时,使恢复报告错误消息。提交 0668719801 更改了 XLogPageRead(),使其验证页头,如果发现无效页头,则重置错误消息并重试读取页面,以修复流复制备机卡在连续记录上的情况。此更改隐藏了关于无效页头的错误消息,这会使用户更难调查 WAL 中实际存在的问题。为了解决这个问题,此提交使 XLogPageRead() 在发现无效页头时报告错误消息。当不在备用模式下时,无效页头应该导致恢复结束,而不是重试读取页面,因此 XLogPageRead() 不需要为重试验证页头。相反,ReadPageInternal() 应该负责在这种情况下进行验证。因此,此提交更改了 XLogPageRead(),以便在不在备用模式下时,它不会为重试验证页头。报告者:Yugo Nagata 作者:Yugo Nagata,Kyotaro Horiguchi 审稿人:Ranier Vilela,Fujii Masao 讨论:https://postgr.es/m/20210718045505.32f463ed6c227111038d8ae4@sraoss.co.jp https://git.postgresql.org/pg/commitdiff/68601985e699adeb267636fd19d3d6113554bd1f
Amit Kapila 提交
Robert Haas 提交
为 BASE_BACKUP 提供灵活的选项。以前,BASE_BACKUP 使用完全硬编码的语法,但这很难扩展。取而代之的是,采用与我们为 VACUUM、ANALYZE、COPY 和 EXPLAIN 等 SQL 命令相同的语法,其中并非所有选项名称都必须是解析器关键字。在新语法中,大多数选项现在都带有一个可选的布尔参数。为了与我们在其他地方的做法保持一致,旧语法中称为 NOWAIT 和 NOVERIFY_CHECKSUMS 的选项在新语法中称为 WAIT 和 VERIFY_CHECKUMS,默认值为 false。在新语法中,FAST 选项已被 CHECKSUM 选项取代,其值可以是 'fast' 或 'spread'。此提交不移除对旧语法的支持。它只是添加了新语法作为附加选项,并在服务器足够新以支持新语法时,让 pg_basebackup 优先使用新语法。补丁由我提供,Fabien Coelho、Sergei Kornilov、Fujii Masao 和 Tushar Ahuja 进行了审查和测试。讨论:http://postgr.es/m/CA+TgmobAczXDRO_Gr2euo_TxgzaH1JxbNxvFx=HYvBinefNH8Q@mail.gmail.com 讨论:http://postgr.es/m/CA+TgmoZGwR=ZVWFeecncubEyPdwghnvfkkdBe9BLccLSiqdf9Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/0ba281cb4bf9f5f65529dfa4c8282abb734dd454
为 CREATE_REPLICATION_SLOT 提供灵活的选项。与 BASE_BACKUP 类似,CREATE_REPLICATION_SLOT 历来使用硬编码的语法。为了提高未来的可扩展性,这里也采用了灵活的选项语法。在新语法中,不再是三个互斥的选项 EXPORT_SNAPSHOT、USE_SNAPSHOT 和 NOEXPORT_SNAPSHOT,而是现在有一个 SNAPSHOT 选项,有三个可能的值:'export'、'use' 和 'nothing'。此提交不移除对旧语法的支持。它只是添加了新语法作为附加选项,并让 pg_receivewal、pg_recvlogical 和 walreceiver 进程使用它。补丁由我提供,Fabien Coelho、Sergei Kornilov 和 Fujii Masao 进行了审查。讨论:http://postgr.es/m/CA+TgmobAczXDRO_Gr2euo_TxgzaH1JxbNxvFx=HYvBinefNH8Q@mail.gmail.com 讨论:http://postgr.es/m/CA+TgmoZGwR=ZVWFeecncubEyPdwghnvfkkdBe9BLccLSiqdf9Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/0266e98c6b865246c3031bbf55cb15f330134e30
Dean Rasheed 已推送
Etsuro Fujita 推送
在 joinrels.c 的注释中添加丢失的单词。作者:Amit Langote 回溯至:13 讨论:https://postgr.es/m/CA%2BHiwqGQNbtamQ_9DU3osR1XiWR4wxWFZurPmN6zgbdSZDeWmw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/700c73312841bd1a89263f238556ce8d8d916258
postgres_fdw:修复 connection.c 中的注释。提交 27e1f1456 未更新一些注释。审稿人:Bharath Rupireddy 回溯至:14 讨论:https://postgr.es/m/CAPmGK15Q2Nm6U%2Ba_GwskrWFEVBZ9_3VKOvRrprGufpx91M_3Sw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/972c7c6567fbb02a59b94ede80b17805de1bc03c