PostgreSQL 每周新闻 - 2021 年 10 月 31 日

发布于 2021-11-01,作者:PWN
PWN

PostgreSQL 每周新闻 - 2021 年 10 月 31 日

万圣节快乐!

PostgreSQL 产品新闻

pg_statement_rollback v1.3,一个在语句级别添加服务器端事务回滚的扩展,已发布

10 月 PostgreSQL 工作

https://archives.postgresql.org/pgsql-jobs/2021-10/

PostgreSQL 新闻

PostgreSQL 星球: https://planet.postgresql.org/

PostgreSQL 每周新闻本周由 David Fetter 带给您

请在太平洋标准时间下午 3:00 前的周日将新闻和公告提交至 david@fetter.org。

应用的补丁

Michaël Paquier 推送了

Heikki Linnakangas 推送了

  • 澄清新的平衡合并代码中几个地方的逻辑。在 selectnewtape() 中,在检查是否要开始新磁带或将新运行附加到现有磁带时,使用“nOutputTapes”而不是“nOutputRuns”。在达到“maxTapes”之前,nOutputTapes 始终等于 nOutputRuns,因此它不会改变逻辑,但将磁带数与磁带数进行比较似乎更合乎逻辑。此外,当前 maxTapes 在合并开始后永远不会被修改,但以这种方式编写,如果它是,该代码仍然可以工作。(尽管需要删除 nOutputRuns == nOutputTapes 断言,并且使用 nOutputRuns % nOutputTapes 在磁带之间均匀分配运行将不再起作用)。同样在 mergeruns() 中,更改为 USEMEM(state->tape_buffer_mem) 以考虑用于磁带缓冲区的内存。它目前等于 availMem,但 tape_buffer_mem 更直接且面向未来。例如,如果我们更改逻辑为仅将剩余内存的一半分配给磁带缓冲区,USEMEM(state->tape_buffer_mem) 仍然是正确的。Coverity 抱怨这些。希望这个补丁有助于它更好地理解逻辑。感谢 Tom Lane 的初步分析。https://git.postgresql.org/pg/commitdiff/166f94377c886516ca986ef8a623cd2e854fe911

Robert Haas 推送了

Thomas Munro 推送

Daniel Gustafsson 推送

Fujii Masao 推送

  • 改进 FDW 在没有有效选项时报告的 HINT 消息。当命令中给出的选项无效时,外部数据包装器的验证器函数会提供一个 HINT 消息,其中包含 CREATE 或 ALTER 命令中指定的对象的有效选项列表。以前,即使对象中没有有效选项,postgresql_fdw_validator() 以及 postgres_fdw 和 dblink_fdw 的验证器函数也以这种方式工作,这可能导致带有空列表的 HINT 消息(因为没有有效选项)。例如,ALTER FOREIGN DATA WRAPPER postgres_fdw OPTIONS (format 'csv') 报告以下 ERROR 和 HINT 消息。此行为令人困惑。错误:无效选项“format”提示:此上下文中的有效选项为:文件_fdw 中不存在此问题。在那种情况下,file_fdw 的验证器函数会报告 HINT 消息“在此上下文中没有有效选项。”此提交改进了 postgresql_fdw_validator() 以及 postgres_fdw 和 dblink_fdw 的验证器函数,使其也这样做。例如,此更改会导致上述 ALTER FOREIGN DATA WRAPPER 命令报告以下消息。错误:无效选项“nonexistent”提示:此上下文中没有有效选项。作者:Kosei Masumura 审阅人:Bharath Rupireddy、Fujii Masao 讨论:https://postgr.es/m/557d06cebe19081bfcc83ee2affc98d3@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/5fedf7417b69295294b154a219edd8a26eaa6ab6

Jeff Davis 推送

Amit Kapila 推送

Magnus Hagander 推送

Peter Geoghegan 推送

Tom Lane 推送

  • 改进 contrib/amcheck 对 CREATE INDEX CONCURRENTLY 的测试。提交 fdd965d07 和 3cd9c3b92 通过同时启动两个独立的 pgbench 运行来测试 CREATE INDEX CONCURRENTLY。这是必要的,以便只有一个客户端线程可以运行 CREATE INDEX CONCURRENTLY,从而避免两个 CIC 之间的死锁。然而,有一种更好的方法,那就是使用咨询锁来防止并发 CIC。这更好,部分原因在于测试代码更短、更易读,但主要是因为它会自动扩展事物,以相对于 INSERT 事务的数量启动适当数量的 CIC。按照提交的方式,通常一半到四分之三的 CIC 事务是无意义的,因为 INSERT 事务已经停止。顺便说一句,删除 background_pgbench,它是为了支持这些测试而添加的,现在不再需要了。如果我们以后发现它的用途,可以随时把它放回去。反向移植到 v12;较旧的 pgbench 版本缺少此方法所需的条件执行功能。Tom Lane 和 Andrey Borodin 讨论:https://postgr.es/m/139687.1635277318@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/7f580aa5d88a9b03d66fcb9a1d7c4fcd69d9e126

  • 加快 snprintf.c 中整数的打印速度。由于唯一可能的除数是 8、10 和 16,因此将除法循环替换为使用常量除数的三个副本不会花费太多代码空间。在大多数机器上,用常量除法可以比用任意值除法便宜得多。一个仅使用 9 位值的 snprintf("foo %d") 测试的微基准测试显示,我的速度提高了约 2 倍 (tgl)。Postgres 的大部分内容并不太依赖 snprintf 的速度,因此在实际情况下的影响几乎无法衡量。尽管如此,节省一个周期就意味着挣得一个周期。Arjan van de Ven 讨论:https://postgr.es/m/40a4b32a-b841-4667-11b2-a0baedb12714@linux.intel.com 讨论:https://postgr.es/m/6e51c644-1b6d-956e-ac24-2d1b0541d532@linux.intel.com https://git.postgresql.org/pg/commitdiff/3c17926eedd51c4094db7c62f59950918044ab1c

  • 将时区数据文件更新到 tzdata 版本 2021e。斐济、约旦、巴勒斯坦和萨摩亚的 DST 法规变更。巴巴多斯、库克群岛、圭亚那、纽埃、葡萄牙和汤加的历史修正。此外,Pacific/Enderbury 时区已重命名为 Pacific/Kanton。以下时区已合并到自 1970 年以来时钟一致的附近人口较多的时区:Africa/Accra、America/Atikokan、America/Blanc-Sablon、America/Creston、America/Curacao、America/Nassau、America/Port_of_Spain、Antarctica/DumontDUrville 和 Antarctica/Syowa。https://git.postgresql.org/pg/commitdiff/937aafd6d5580b81134c7f303d04cf7561ad0309

  • 测试并记录 plpgsql 中初始化交叉引用的行为。我们有一个测试表明,变量在其自己的初始化表达式中以及同一块中的先前表达式中都不可引用。它在同一块中的后续表达式中可引用的,但 AFAICS 没有测试用例来练习它。添加一个,并添加一些错误情况。此外,记录这是可能的,因为文档未能涵盖这一点。根据来自 tomás 在 tuxteam 的问题。我感觉没有必要反向移植这个,但我们应该确保我们将来不会破坏它。讨论:https://postgr.es/m/20211029121435.GA5414@tuxteam.de https://git.postgresql.org/pg/commitdiff/a2a731d6c9db0ba650aa6f7c4fe349ccf712f74d

Peter Eisentraut 推送