2025年9月25日: PostgreSQL 18 发布!

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 相关新闻

Planet PostgreSQL:https://planet.postgresql.org/

本周 PostgreSQL 周报由 David Fetter 提供。

请在太平洋标准时间(PST8PDT)周日晚上3:00之前将新闻和公告发送至 david@fetter.org。

已应用补丁

Michaël Paquier 提交

Heikki Linnakangas 提交

  • 澄清一些平衡合并代码中的逻辑。在 selectnewtape() 中,使用 'nOutputTapes' 而不是 'nOutputRuns' 来检查是开始一个新 tape 还是将一个新 run 追加到现有 tape。在达到 'maxTapes' 之前,nOutputTapes 始终等于 nOutputRuns,因此它不会改变逻辑,但将 tape 数量与 tape 数量进行比较似乎更合乎逻辑。此外,目前 maxTapes 在合并开始后从未被修改,但这样编写的代码即使被修改也会继续工作。(尽管 nOutputRuns == nOutputTapes 的断言将需要被移除,并且使用 nOutputRuns % nOutputTapes 将运行均匀分布到 tape 上可能无法很好地完成)。类似地,在 mergeruns() 中,更改为 USEMEM(state->tape_buffer_mem) 来考虑 tape 缓冲区使用的内存。它目前等于 availMem,但 tape_buffer_mem 更直接且面向未来。例如,如果我们更改了逻辑,只将剩余内存的一半分配给 tape 缓冲区,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:无效选项“format” HINT:在此上下文中有效选项是: file_fdw 中没有此类问题。file_fdw 的验证器函数在这种情况下会报告 HINT 消息“在此上下文中没有有效选项。”。此提交改进了 postgresql_fdw_validator() 以及 postgres_fdw 和 dblink_fdw 的验证器函数,使它们也这样做。例如,此更改将导致上述 ALTER FOREIGN DATA WRAPPER 命令报告以下消息。ERROR:无效选项“nonexistent” HINT:在此上下文中没有有效选项。作者: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's 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 release 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 中初始化交叉引用的行为。我们有一个测试表明一个变量在其自身的初始化表达式中,以及在同一块中的先前表达式中是不可引用的。它**可以**在同一块中的后续表达式中引用,但据我所知,没有测试用例能覆盖到这一点。添加一个,并添加一些错误案例。此外,记录这是可能的,因为文档未能涵盖这一点。根据 tomas at tuxteam 的提问。我个人认为没有必要回溯此更改,但我们应该确保将来不会破坏它。讨论:https://postgr.es/m/20211029121435.GA5414@tuxteam.de https://git.postgresql.org/pg/commitdiff/a2a731d6c9db0ba650aa6f7c4fe349ccf712f74d

Peter Eisentraut 提交