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

发布于 2021-11-01,PostgreSQL Global Development Group
PG 每周新闻

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

万圣节快乐!

PostgreSQL 产品新闻

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

PostgreSQL 十月招聘信息

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

PostgreSQL 新闻报道

Planet 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 消息。外部数据包装器的验证函数在 CREATE 或 ALTER 命令中给出的选项无效时,会提供一个包含指定对象的有效选项列表的 HINT 消息。此前,postgresql_fdw_validator() 以及 postgres_fdw 和 dblink_fdw 的验证函数即使对象中没有有效选项也以这种方式工作,这可能导致 HINT 消息带有空列表(因为没有有效选项)。例如,ALTER FOREIGN DATA WRAPPER postgres_fdw OPTIONS (format 'csv') 会报告以下 ERROR 和 HINT 消息。这种行为令人困惑。 ERROR: invalid option "format" HINT: Valid options in this context are: file_fdw 中没有此问题。file_fdw 的验证函数在这种情况下报告 HINT 消息 "There are no valid options in this context."。 此提交改进了 postgresql_fdw_validator() 以及 postgres_fdw 和 dblink_fdw 的验证函数,使它们也这样做。例如,此更改使上述 ALTER FOREIGN DATA WRAPPER 命令报告以下消息。 ERROR: invalid option "nonexistent" HINT: There are no valid options in this context. 作者: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。这样更好,部分因为测试代码更短、更可读,但主要是因为它自动调整启动适当数量的 CIC 相对于 INSERT 事务的比例。按照之前的提交,通常一半到四分之三的 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,用三个使用常量除数的副本替换除法循环不需要太多代码空间。在大多数机器上,除以常量比除以任意值的开销低得多。测试仅 snprintf("foo %d") 使用 9 位数值的微基准测试显示,对我(tgl)来说大约有 2 倍的加速。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 版本。斐济、约旦、巴勒斯坦和萨摩亚的夏令时法律变更。巴巴多斯、库克群岛、圭亚那、纽埃、葡萄牙和汤加的历史更正。此外,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 中初始化交叉引用的行为。我们有一个测试显示变量在其自身的初始化表达式中不可引用,也不可在同一块中之前的表达式中引用。它在同一块中后续的表达式中可以引用,但据我所知没有测试用例来验证这一点。添加一个,并添加一些错误案例。 此外,记录这是可能的,因为文档未涵盖这一点。 根据 tomás at tuxteam 的问题。我认为不需要回溯移植此内容,但我们应确保将来不会破坏它。 讨论: https://postgr.es/m/20211029121435.GA5414@tuxteam.de https://git.postgresql.org/pg/commitdiff/a2a731d6c9db0ba650aa6f7c4fe349ccf712f74d

Peter Eisentraut 推送了: