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 为您呈现
请在太平洋标准时间周日下午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) 之间获取的任何快照将为空,导致此时依赖快照的任何事务可能损坏数据,因为可能仍有一些 2PC 事务需要跟踪,RecentXmin 在同一事务中连续调用 GetSnapshotData() 时会向后移动。由于 SharedRecoveryState 是判断是否可以安全丢弃 KnownAssignedXids 的参考点,此提交将步骤 2) 移到步骤 3) 之后,这样我们永远不会得到空快照。此问题自热备引入以来就存在,因此向下回溯到所有版本。出现不正确快照的窗口极小,但我在运行 023_pitr_prepared_xact.pl 时观察到了此问题,构建农场成员 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 的最后文件名和当前打开的 fd)。除了这些点之外,代码在错误处理以及是否应该创建或继续文件方面是相同的。此更改使代码整体更简洁,并有助于引入更多基于文件的日志目标。此重构类似于 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() 在某些情况下会强制将日志条目重定向到 stderr 以用于 csvlog,例如 syslogger 尚未可用。如果发生这种情况,csvlog 会回退到 stderr 来记录一些信息而不是什么都不记录。代码的组织方式是 stderr 在 csvlog 之前完成,csvlog 通过反转条件检查 stderr 是否尚未发生。使用这种代码组织方式,如果在 WIN32 上将 Postgres 作为服务运行,可能会丢失一些消息,因为没有可用的 stderr,并且保存 stderr 消息的 StringInfoData 的处理因此相当混乱。此提交将 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 测试时的错误消息相当简短,对于新加入 postgres 开发的开发人员来说可以更有帮助。这添加了一个小提示,说明如何在这种情况下运行测试。作者: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 中有很好的文档记录,但检查失败时发出的错误消息很简短,对于没有先前上下文的新开发人员没有提示。这添加了一个错误提示以帮助新加入 postgres 开发的开发人员。作者: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() 检查上添加了错误提示,但意外地将 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 映射文本文件。有几个较新的版本可用。没有功能上的差异,但让我们先更新它们,这样下次有人想在这个领域做一些实际工作时就不会有意外的差异。 https://git.postgresql.org/pg/commitdiff/ce27c8953e8e48c69c690c0e5795cde40ed59fd2
使 Unicode makefile 支持并行安全。修复规则使每个规则都是并行安全的,使用与代码树中其他地方相同的技巧来处理产生多个输出文件的规则。重构整个 makefile 以减少重复。讨论: https://www.postgresql.org/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 实际上比使用 London 更合适,因为冰岛自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 以始终使用查询范围表中的信息,以避免在已失败的事务中进行目录查找。然而,由于 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 版本的说明。我们目前有构建农场成员测试回溯到 AIX 7.1,但不再更早,更旧的 AIX 版本已经很久没有得到 IBM 的支持。所以说 7.1 是最旧的支持版本。讨论: https://postgr.es/m/87y278s6iq.fsf@wibble.ilmari.org https://git.postgresql.org/pg/commitdiff/08e2daf06c71881415ebd19105a8fe53f6eb2f8f
文档:改进 ^@ 开头匹配运算符的文档。此运算符之前在任何地方都没有正式文档。为了给它一个自然的位置,将 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
修复 Windows 上带有偏移量的 TestLib::slurp_file()。3c5b0685b921 使用 setFilePointer() 来设置文件句柄的位置,但传递了错误的文件句柄,总是将位置保持在 0。不是简单地修复这个问题,而是移除对 setFilePointer() 的使用,此时我们有一个 perl fd,所以可以直接使用 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 的 Tab 补全。此提交使 psql 支持 LOCK TABLE 命令的 ONLY 和 NOWAIT 关键字的 Tab 补全。作者: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 使用完全硬编码的语法,但这很难扩展。相反,采用我们用于 SQL 命令(如 VACUUM、ANALYZE、COPY 和 EXPLAIN)的相同语法,其中不需要所有选项名称都是解析器关键字。在新语法中,大多数选项现在接受一个可选的布尔参数。为了匹配我们在其他地方的做法,旧语法中称为 NOWAIT 和 NOVERIFY_CHECKSUMS 的选项在新语法中称为 WAIT 和 VERIFY_CHECKSUMS,默认值为 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