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) 之间获取的任何快照都将为空,导致任何依赖此时快照的事务可能会损坏数据,因为可能仍有一些 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 的覆盖(这些可能不值得运行额外的资源),并且没有对 log_destination 与 stderr 和 csvlog 的不同组合的重新加载的覆盖。我已针对此重构分别测试了所有这些情况。作者: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 检查 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://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 的默认区域映射。这里有两个明显的改进:* 将“格林威治标准时间”映射到 Atlantic/Reykjavik 实际上比使用伦敦更合适,因为冰岛自 1968 年以来就没有观察到夏令时,因此这更接近人们可能期望的。* 由于“萨摩亚”时区被指定为 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
修复 windows 上带偏移量的 TestLib::slurp_file()。3c5b0685b921 使用 setFilePointer() 设置文件句柄的位置,但传递了错误的文件句柄,总是将位置保留为 0。与其只是修复该问题,不如删除 setFilePointer() 的使用,因为此时我们有一个 perl fd,所以我们可以直接使用 perl 的 seek()。此外,perl 文件句柄没有关闭,只是关闭了 windows 文件句柄。Reviewed-By: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 推送了
藤井雅雄推送了
psql:改进 LOCK TABLE 的制表符补全。此提交使 psql 支持 LOCK TABLE 命令的 ONLY 和 NOWAIT 关键字的制表符补全。作者:谷川 耕佑 审阅人:加藤 伸也,藤井 雅雄 讨论: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,藤井 雅雄 讨论:https://postgr.es/m/CAB8KJ=infievn4q1N4X7Vx8w4_RMPPG0pLvxhSDjy5WQOSHW9g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f6b5d05ba9a4ac7c5ebec76045c6e0afcf7c9eec
使恢复在找到无效页面头时报告错误消息。提交 0668719801 更改了 XLogPageRead(),以便它验证页面头,如果找到无效的页面头,则重置错误消息并重试读取页面,以修复流式备用服务器卡在延续记录上的情况。此更改隐藏了关于无效页面头的错误消息,这将使使用者更难以调查 WAL 中发现的实际问题。为了解决该问题,此提交使 XLogPageRead() 在找到无效页面头时报告错误消息。当不处于备用模式时,无效的页面头应导致恢复结束,而不是重试读取页面,因此 XLogPageRead() 不需要为重试验证页面头。相反,在这种情况下,ReadPageInternal() 应负责验证。因此,此提交更改了 XLogPageRead(),使其在不处于备用模式时不会为重试验证页面头。报告人:永田 雄吾 作者:永田 雄吾,堀口 京太郎 审阅人:Ranier Vilela,藤井 雅雄 讨论: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_CHECKUMS,默认值为 false。在新语法中,FAST 选项已被 CHECKSUM 选项替换,该选项的值可以是 'fast' 或 'spread'。此提交不会删除对旧语法的支持。它只是添加新的语法作为附加选项,并使 pg_basebackup 在服务器足够新以支持它时优先使用新语法。我的补丁,由 Fabien Coelho、Sergei Kornilov、藤井 雅雄 和 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 和藤井 雅雄 审阅。讨论: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