PostgreSQL 每周新闻 - 2021年12月19日

发布于 2021-12-20,PostgreSQL Global Development Group
PG 每周新闻

PostgreSQL 每周新闻 - 2021年12月19日

FOSDEM PGDay 2022 将于2022年2月5-6日在线举行。 https://fosdem.org/2022/

《PostgreSQL 迁移指南》,汇集了大量宝贵经验,提供法语和英语版本,已出版

pgDay Paris 2022 将于2022年3月24日在法国巴黎举行。征稿截止日期为2021年12月31日午夜(巴黎时间)。

Citus Con,一个全球虚拟开发者活动,将于2022年4月12-13日举行。 征稿现已开放。

PostgreSQL 产品新闻

Pgpool-II 4.3.0,一个用于 PostgreSQL 的连接池和语句复制系统, 已发布

Access-to-PostgreSQL v2.3 已发布

check_pgbackrest 2.2,一个兼容 Nagios 的 pgBackRest 监控工具,已发布。 https://github.com/dalibo/check_pgbackrest/releases

DB Comparer 5.0 for PostgreSQL 已发布

Database .NET v33.6,一个多数据库管理工具,现已支持 PostgreSQL,已发布

pgAdmin4 6.3,一个用于 PostgreSQL 的 Web 和原生 GUI 控制中心, 已发布

pgFormatter 5.2,一个 SQL 代码格式化/美化工具,已发布。 https://github.com/darold/pgFormatter/blob/master/ChangeLog

MySQL-to-PostgreSQL v5.5 已发布

十二月份 PostgreSQL 招聘信息

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

PostgreSQL 本地活动

Nordic PGDay 2022 将于2022年3月22日在芬兰赫尔辛基的 Hilton Helsinki Strand Hotel 举行。征稿截止日期为2021年12月31日 详情

PostgreSQL 新闻报道

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

本周 PostgreSQL 每周新闻由 David Fetter 为您呈现

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

已提交的补丁

Michaël Paquier 推送了:

Tom Lane 推送了:

Peter Geoghegan 推送了:

  • vacuumlazy.c: 将 dead_tuples 重命名为 dead_items。提交 8523492d 简化了一个项目被 VACUUM 视为"死亡"的含义:收集在内存中的 TID(为索引清理准备)必须始终来自堆页面中的 LP_DEAD 存根行指针,这些指针是在裁剪后发现的。这正式确立了索引清理(和堆清理)是可选过程的概念。与裁剪不同,它们可以无限期推迟,而不会有违反基本不变量的风险。例如,留下 LP_DEAD 项目显然不会增加事务 ID 回卷的风险。没有事务 ID 就不可能有事务 ID 回卷。重命名任何引用 DEAD 元组(有存储的元组)的内容强化了这一切。vacuumlazy.c 之外的代码继续模糊 dead/deleted 元组和 LP_DEAD 项目之间的区别。这是必要的,因为自动清理调度仍然主要由"死亡项目/元组"统计信息驱动。将来我们可能会发现用更复杂的东西替换此模型是有用的,作为教自动清理执行更频繁的清理以针对恰好更容易因版本变更而膨胀的单个索引的一步。顺便简化了一些处理 VACUUM 的 dead_items 数组的函数签名。Author: Peter Geoghegan pg@bowt.ie Reviewed-By: Masahiko Sawada sawada.mshk@gmail.com Discussion: https://postgr.es/m/CAH2-WzktGBg4si6DEdmq3q6SoXSDqNi6MtmB8CmmTmvhsxDTLA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4f8d9d1217956798e761491d236af576b27f5e12

  • vacuumlazy.c: 修复剩余的 "dead tuple" 引用。提交 4f8d9d12 中的疏忽。Reported-By: Masahiko Sawada sawada.mshk@gmail.com Discussion: https://postgr.es/m/CAD21AoDm38Em0bvRqeQKr4HPvOj65Y8cUgCP4idMk39iaLrxyw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4bdfe6855901a4104dbdac2be53d465b626e244d

  • 标准化清理锁术语。术语"超级排他锁"是"缓冲区清理锁"的同义词,最早出现在 nbtree 中多年前。通过一致使用清理锁术语来标准化。这完成了提交 276db875 开始的工作。没有好的理由有两个术语。但有一个好的理由只有一个:避免关于 VACUUM 在索引 AM 中在 ambulkdelete 调用期间获取完整清理锁(而不仅仅是普通排他锁)的原因的混淆。这与保护物理索引数据结构本身无关。它是实现一个锁定协议所需的,该协议确保指向堆/表结构的 TID 不会在安全之前被 VACUUM 标记为可回收(这在某种程度上类似于 VACUUM 在其第一次堆遍历期间使用清理锁的方式)。请注意,索引 AM 不一定必须实现此锁定协议——一些索引 AM 使用 MVCC 快照作为防止不安全 TID 回收的唯一互锁。顺便更新了 nbtree README。清晰地将上述索引清理锁定协议的讨论与提交 2ed5b87f 添加的"丢弃叶页面 pin"优化的讨论分开。我们现在通过描述单个索引扫描如何安全地选择退出应用标准锁定协议(从而可以避免阻塞 VACUUM 的进度)来构建后者的讨论。同时记录了为什么该优化在 nbtree 仅索引扫描期间不安全应用。Author: Peter Geoghegan pg@bowt.ie Discussion: https://postgr.es/m/CAH2-WzngHgQa92tz6NQihf4nxJwRzCV36yMJO_i8dS+2mgEVKw@mail.gmail.com Discussion: https://postgr.es/m/CAH2-WzkHPgsBBvGWjz=8PjNhDefy7XRkDKiT5NxMs-n5ZCf2dA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/bcf60585e6e0e95f0b9e5d64c7a6edca99ec6e86

Amit Kapila 推送了:

Daniel Gustafsson 推送了:

Álvaro Herrera 推送了:

Tomáš Vondra 推送了:

Peter Eisentraut 推送了:

Robert Haas 推送了:

  • 记录 tar 归档现已正确终止。提交 5a1007a5088cd6ddf892f7422ea8dbaef362372f 更改了服务器行为,但我没有注意到现有行为已被记录,因此没有更新文档。此提交做了这些。我选择提及行为已更改,而不是仅仅移除对标准偏差的引用。这似乎对工具作者可能有帮助。Discussion: http://postgr.es/m/CA+TgmoaYZbz0=Yk797aOJwkGJC-LK3iXn+wzzMx7KdwNpZhS5g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/81fca310b38e7808dff9c01a26564e8f2db10893

  • 默认将 log_checkpoints 设为 on,log_autovacuum_min_duration 设为 10m。这里的想法是,当已知性能问题发生在某个时间点时,如果日志中有一些可用信息来帮助弄清楚那段时间附近可能发生了什么,那是件好事。此更改引起了高于平均水平的异议,因为这意味着使用默认设置的服务器即使没有任何问题也会产生一些日志输出。然而,据我统计,邮件列表讨论中支持此更改的人大约是反对者的两倍。认为额外日志输出在实践中不成问题的原因是:(1) 此设置可以生成消息的速率在正确配置的系统上限制为每几分钟一条,(2) 生产系统倾向于由于失败的连接尝试、应用程序活动产生的 ERROR 消息等,在日志中有更多垃圾。Bharath Rupireddy, reviewed by Fujii Masao and by me。许多其他人在帖子中评论,但据我所见,那是对更改的利弊讨论,而非对补丁的审查。Discussion: https://postgr.es/m/CALj2ACX-rW_OeDcp4gqrFUAkf1f50Fnh138dmkd0JkvCNQRKGA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/64da07c41a8c0a680460cdafc79093736332b6cf

  • 移除 InitXLOGAccess()。RecoveryInProgress() 调用 InitXLOGAccess() 不太好,因为状态查询函数通常不应该有执行初始化的副作用。我们可以通过从其他地方调用 InitXLOGAccess() 来修复,但不如直接移除它。InitXLogAccess() 做的一件事是初始化 wal_segment_size,但它不需要这样做。在 postmaster 中,PostmasterMain() 调用 LocalProcessControlFile(),所有子进程将继承该值——除了 EXEC_BACKEND 构建,但那时每个后端运行 SubPostmasterMain(),它也调用 LocalProcessControlFile()。InitXLOGAccess() 做的另一件事是更新 RedoRecPtr 和 doPageWrites,但这不是关键的,因为使用它们的所有代码在发现它们已更改时都会重试。唯一的区别是大多数代码现在将看到一个肯定无效的初始值,而不是一个可能已经严重过时的值,但这在每个后端生命周期中只会发生一次,所以不应该是大问题。补丁由我编写,reviewed by Nathan Bossart, Michael Paquier, Andres Freund, Heikki Linnakangas, and Álvaro Herrera. Discussion: http://postgr.es/m/CA+TgmoY7b65qRjzHN_tWUk8B4sJqk1vj1d31uepVzmgPnZKeLg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/fa0e03c15a9f67671f0a6e0ec66d5e2ac7119c8a

Fujii Masao 推送了:

  • postgres_fdw: 修复意外报告空消息的问题。postgres_fdw 中的 pgfdw_report_error() 从 PGresult 或 PGconn 获取消息以报告从远程服务器收到的错误。以前,如果它无法从它们中的任何一个获取消息,就会意外报告空消息。这个问题的原因是 pgfdw_report_error() 没有正确处理无法获取消息且其局部变量 message_primary 被设置为 '\0' 的情况。此提交改进了 pgfdw_report_error(),使其在没有获取消息且 message_primary 被设置为 '\0' 时报告 "could not obtain ..." 消息。这与 message_primary 为 NULL 时的行为相同。dblink 中的 dblink_res_error() 有相同的问题,因此此提交也以相同方式改进了它。回溯移植到所有支持的分支。Author: Fujii Masao Reviewed-by: Bharath Rupireddy Discussion: https://postgr.es/m/477c16c8-7ea4-20fc-38d5-ed3a77ed616c@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/557c39bba925d553c6bb12b5e80d1964d355583b

  • postgres_fdw: 在获取查询结果超时时报告警告。当中止远程事务或向远程服务器发送取消请求时,postgres_fdw 调用 pgfdw_get_cleanup_result() 等待事务中止查询或取消请求的结果到达。如果超时或连接故障,它将无法获取结果。以前,即使在 pgfdw_get_cleanup_result() 中超时或连接故障发生,postgres_fdw 也不报告任何警告消息。当此类事件发生时,这可能使故障排除更加困难。此提交使 pgfdw_get_cleanup_result() 在失败时告诉其调用者发生了什么问题(超时或连接错误),并使其调用者根据该信息报告适当的警告消息。Author: Fujii Masao Reviewed-by: Bharath Rupireddy Discussion: https://postgr.es/m/15aa988c-722e-ad3e-c936-4420c5b2bfea@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/815d61fcd485e8c60dba22988bf5a90fc12df32d

  • doc: 添加关于 postgres_fdw.application_name 的说明。postgres_fdw.application_name 可以是任何长度的任何字符串,甚至可以包含非 ASCII 字符。然而,当它被传递并用作外部服务器中的 application_name 时,会被截断为少于 NAMEDATALEN 个字符,并且其中除可打印 ASCII 之外的任何字符将被替换为问号。此提交将这些说明添加到文档中。Author: Hayato Kuroda Reviewed-by: Kyotaro Horiguchi, Fujii Masao Discussion: https://postgr.es/m/TYCPR01MB5870D1E8B949DAF6D3B84E02F5F29@TYCPR01MB5870.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/58e2e6eb67fec14c793c74207407e172d7e0291d

Andrew Dunstan 推送了:

Thomas Munro 推送了:

Alexander Korotkov 推送了:

Andres Freund 推送了: