PostgreSQL 每周新闻 - 2021 年 4 月 25 日

发布于 2021-04-26,作者:PWN
PWN

PostgreSQL 每周新闻 - 2021 年 4 月 25 日

本周人物:https://postgresql.life/post/pavlo_golub/

PostgreSQL 产品新闻

JDBC 42.2.20 发布 https://jdbc.postgresql.ac.cn/documentation/changelog.html#version_42.2.20

kubgres 1.1 发布,这是一个 Kubernetes 操作器,可以部署配置了复制和故障转移的 PostgreSQL pod 集群。https://github.com/reactive-tech/kubegres/releases/tag/v1.1

pspg 4.6.1 发布,这是一个专为 PostgreSQL 设计的分页器。https://github.com/okbob/pspg/releases/tag/4.6.1

pgAdmin4 5.2 发布,这是一个用于 PostgreSQL 的 Web 和原生 GUI 控制中心。https://www.pgadmin.org/docs/pgadmin4/5.2/release_notes_5_2.html

pg_log_statements 0.2 发布,这是一个扩展,可以记录特定服务器进程的语句。https://github.com/pierreforstmann/pg_log_statements/releases

四月份的 PostgreSQL 工作

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

PostgreSQL 新闻

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

本周 PostgreSQL 每周新闻由 David Fetter 为您带来

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

已应用的补丁

Thomas Munro 推送了

Michaël Paquier 推送了

Amit Kapila 推送了

Peter Eisentraut 推送了

Peter Geoghegan 推送了

  • 记录 VACUUM 中 LP_DEAD 记账问题。记录 VACUUM 的软假设,即在修剪期间遇到的任何 LP_DEAD 项在 VACUUM 完成之前将变为 LP_UNUSED 项。这是 VACUUM 用于生成其关于表的最终报告给统计信息收集器的记账所必需的。它还影响 VACUUM 如何确定哪些堆页面是可截断的。在这两种情况下,VACUUM 都关注的是页面在不久的将来的可能内容,而不是页面的当前内容。这种情况造成了一种错误的印象,即 VACUUM 的死元组记账与 ANALYZE 期间使用的类似记账存在显着差异。至少在软假设完全奏效的情况下,过去和现在都没有实质性的差异。现在这一点更清楚了。同时记录了 VACUUM 的死元组记账未完全奏效的情况。VACUUM 可能会留下大量 LP_DEAD 项,并且不会在 VACUUM 的统计信息收集器报告中记录为剩余的死元组。此行为可以追溯到提交 a96c41fe,该提交使 VACUUM 能够在用户请求时不进行索引和堆清理。提交 1e55e7d1 最近添加到 VACUUM 的故障保护机制采用了相同的死元组记账方法。报告者:Masahiko Sawada sawada.mshk@gmail.com 讨论:https://postgr.es/m/CAH2-Wz=Jmtu18PrsYq3EvvZJGOmZqSO2u3bvKpx9xJa5uhNp=Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/7136bf34f28892362144ae2e350714836a5c0c0c

  • amcheck:MAXALIGN() nbtree 特殊区域偏移量。这并非绝对必要,但理论上如果未来 nbtree 特殊区域的宽度发生变化,它可能会很重要——即使有填充,它的总大小也可能不是 MAXALIGN() 量子的偶数。PageInit() 会对所有特殊区域偏移量进行 MAXALIGN() 操作,但 amcheck 使用该偏移量来执行行指针的初始基本验证,因此我们不依赖于页面头的偏移量。这样做的真正原因是为添加其他索引 AM 的 amcheck 覆盖率的新代码设置一个好的示例。报告者:Bharath Rupireddy bharath.rupireddyforpostgres@gmail.com 讨论:https://postgr.es/m/CALj2ACUMqTR9nErh99FbOBmzCXE9=gXNqhBiwYOhejJJS1LXqQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/bb3ecc8c961896ecb2ad3d5ba705c2877b933945

Magnus Hagander 推送了

Andrew Dunstan 推送了

Tom Lane 推送了

Bruce Momjian 推送了

Álvaro Herrera 推送了

  • 在分离分区时,不要添加冗余约束。在 ALTER TABLE .. DETACH CONCURRENTLY 时,我们会添加一个新的表约束,该约束与分区约束重复。但是,如果分区已经具有另一个暗示该约束的约束,则这是不必要的。如果存在完全“相等”的匹配,我们已经避免添加重复约束 - 这只是提高了检查的质量。作者:Justin Pryzby pryzby@telsasoft.com 审核者:Álvaro Herrera alvherre@alvh.no-ip.org 讨论:https://postgr.es/m/20210410184226.GY6592@telsasoft.com https://git.postgresql.org/pg/commitdiff/7b357cc6ae553c0ecacdc11b2e5278b7bf477dba

  • 添加关于 extract_autovac_opts 不持有锁的注释。根据 Tom Lane 的观察。讨论:https://postgr.es/m/1901125.1617904665@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/7c298c6573a0f181963ddcb40c850fa9c7da0ada

  • 修复分区分离中的 relcache 不一致风险。在来自 ri_triggers.c 的查询期间,我们需要省略标记为挂起分离的分区 - 否则,RI 查询会欺骗性地允许将行插入引用表中,该行的相应行位于分离的分区中。这是错误的:一旦分离操作完成,该行将成为孤立行。但是,代码在可重复读取事务中没有这样做,因为 relcache 保留了包含分区的分区描述符的副本,并在 RI 查询中使用它。此提交更改了 partdesc 缓存代码,使其仅保留不依赖于快照的描述符(即:那些不存在分离分区的描述符,以及那些包含分离分区的描述符)。当请求不带分离分区的 partdesc 时,我们每次都创建一个新的;此外,这些 partdesc 存储在 PortalContext 中,而不是 CacheMemoryContext 中。find_inheritance_children 获得一个新的输出 *detached_exist 布尔值,该值指示是否找到任何标记为挂起分离的分区。其“include_detached”输入标志已更改为“omit_detached”,因为该名称更自然地捕获了所需的语义。CreatePartitionDirectory() 和 RelationGetPartitionDesc() 参数的名称也相同地更改。这是因为运行 relcache 破坏的 buildfarm 成员(它不会保留不正确缓存的 partdesc)破坏了一个测试,这使我们意识到该测试的预期输出是错误的。此提交还更正了该预期输出。作者:Amit Langote amitlangote09@gmail.com 作者:Álvaro Herrera alvherre@alvh.no-ip.org 讨论:https://postgr.es/m/3269784.1617215412@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/8aba9322511f718f12b618470d8c07f0ee5f0700

  • 修复未初始化内存错误。让 find_inheritance_children 的相关调用者在调用它之前将 detached_exist 值设置为 false,以便该例程只需要在必要的情况下将其设置为 true。否则不要触碰它。根据 buildfarm 成员 thorntail(它在这里报告了一个 UBSan 失败)。 https://git.postgresql.org/pg/commitdiff/43b55ec4bc3bc06596d966391f16defe016310ec

Etsuro Fujita 推送了

Fujii Masao 推送了

  • 文档:修复关于 pg_basebackup 的过时描述。以前的文档说明,如果使用“-X none”选项,则无法保证在从备用服务器进行备份时,所有必需的 WAL 文件都将在 pg_basebackup 结束时归档。但是此限制已通过提交 52f8a59dd9 删除。现在,即使从备用服务器进行备份,pg_basebackup 也可以等待所有必需的 WAL 文件归档。因此,此提交从文档中删除了此类过时的描述。此外,此提交在文档中添加了关于从备用服务器进行备份时的限制的新描述。限制是 pg_basebackup 无法强制备用服务器在备份结束时切换到新的 WAL 文件,这可能会导致 pg_basebackup 等待很长时间才能切换和归档最后一个所需的 WAL 文件,尤其是在主服务器上的写入活动较低时。向引入此问题的 v10 进行反向移植。报告者:Kyotaro Horiguchi 作者:Kyotaro Horiguchi,Fujii Masao 审核者:Kyotaro Horiguchi,Fujii Masao 讨论:https://postgr.es/m/20210420.133235.1342729068750553399.horikyota.ntt@gmail.com https://git.postgresql.org/pg/commitdiff/eaec48b3c54eec222d64468b57af80ee4ddf76a9

  • 在 gram.y 和 parsenodes.h 中将 COMPRESSION 选项重新排序为字母顺序。提交 bbe0a81db6 在 CREATE TABLE 命令中引入了“INCLUDING COMPRESSION”选项,但之前的 gram.y 和 parsenodes.h 中的 TableLikeOption 没有将其与其余选项按字母顺序分类。作者:Fujii Masao 审核者:Michael Paquier 讨论:https://postgr.es/m/YHerAixOhfR1ryXa@paquier.xyz https://git.postgresql.org/pg/commitdiff/3f20d5f37086e548c32ddb9d6ae09c2e1ce300ce

Alexander Korotkov 推送了

Noah Misch 推送了

待处理的补丁

Peter Smith 发送了一个补丁,以重新排列 CREATE SUBSCRIPTION 的选项列表。

Bharath Rupireddy 发送了另一个修订版的补丁,以添加用于多重和单次插入的新表 AM,并将相同的新表 AM 用于 CTAS、REFRESH MATERIALIZED VIEW 和 COPY。

Amul Sul 发送了另一个修订版的补丁,以从 transformCreateStmt 中删除冗余变量。

Pavel Stěhule 发送了另一个修订版的补丁,以使在 auto_explain 中记录 seqscan 成为可能。

David Rowley 发送了另一个修订版的补丁,以减少 Windows 上 contrib 构建的特殊情况的数量。

Amul Sul 发送了另一个修订版的补丁,以添加 RelationGetSmgr 内联函数。

Masahiko Sawada 发送了另一个修订版的补丁,以跳过冻结元组插入的 vmbuffer。

Dagfinn Ilmari Mannsåker 发送了一个补丁,以创建一个用于从表达式中删除 RelabelType 节点的函数,从而将相同模式的多个重复项合并为一个。

Masahiko Sawada 和 Amit Kapila 交换了使用 HTAB 进行复制槽统计信息的补丁。

Vigneshwaran C 和 Amit Kapila 交换了在复制槽释放期间更新解码统计信息的补丁。

Bharath Rupireddy 发送了一个补丁,以在 lazy_truncate_heap、do_pg_stop_backup 中使用 WaitLatches 进行锁等待,而不是 pg_usleep(),并用于身份验证前和身份验证后延迟。

Bharath Rupireddy 发送了一个补丁,将 parallel_leader_participation GUC 移动到资源消耗类别。

Peter Smith 发送了另一个修订版的补丁,以向内置逻辑复制添加对准备好的事务的支持,并为流式事务添加准备 API 支持。

Dan Carter 发送了一个补丁,以向 libpq 添加 GSSAPI ccache_name 选项。

Takamichi Osumi 和 Amit Kapila 交换了补丁,以修复 TRUNCATE 和同步逻辑复制之间的不一致性。

Amit Langote 发送了一个补丁,以修复 pgoutput 插件中的 tupdesc 泄漏。

Bharath Rupireddy 发送了一个补丁,以跳过重复关系的 VACUUM/ANALYZE。

Pavel Stěhule 发送了另一个修订版的补丁,以向 psql 添加 PSQL_WATCH_PAGER 设置。

Masahiro Ikeda 发送了另一个修订版的补丁,以在不引入新变量的情况下提高报告 WAL 统计信息的性能。

Fujii Masao 发送了另一个修订版的补丁,以记录 TRUNCATE 在外部表上的工作方式,并确保原始查询中的任何 ONLY 子句都不会传递给外部表。

Hou Zhijie 发送了一个补丁,以修复具有错误并行安全标志的测试用例。

Zeng Wenjing 发送了另一个修订版的补丁,以实现全局临时表。

Simon Riggs 发送了一个补丁,以记录将约束更改为 VALIDATE 它需要 SHARE UPDATE EXCLUSIVE 锁的事实。

Simon Riggs 发送了一个补丁,以降低 CHECK 约束在允许它们为 NOT VALID 时的锁级别。

Daniil Zakhlystov 发送了另一个修订版的补丁,以添加 zlib 和 zstd 流式压缩,并实现 libpq 压缩。

Tom Lane 发送了一个补丁,以更好地记录儒略日期。

Álvaro Herrera 发送了一个补丁,以向 psql 添加 ALTER TABLE .. DETACH PARTITION CONCURRENTLY 的制表符补全。

Tom Stellard 发送了一个补丁,使 jit 能够解决 s390x 上的潜在数据布局不匹配问题。

Justin Pryzby 发送了一个补丁,以在执行 CREATE TABLE ... LIKE 时添加 COMPRESSION 作为可能性。

Kyotaro HORIGUCHI 发送了一个补丁,以修复一些可疑的消息。

Tang 发送了一个补丁,以在 psql 中比较“pg_”的内容时使用 pg_strncasecmp 替换 strncmp。

Tang 发送了另一个修订版的补丁,以支持 psql 中大写字符输入的制表符补全。

Hou Zhijie 发送了另一个修订版的补丁,以使并行执行 INSERT SELECT 成为可能。

Mark Dilger 和 Robert Haas 交换了补丁,以向 pg_amcheck 添加 toast 指针损坏检查。

Bharath Rupireddy 发送了一个补丁,以在 PageGetItemIdCareful 中 MAXALIGN sizeof(BTPageOpaqueData)。

Ajin Cherian 发送了另一个修订版的补丁,以跳过逻辑复制的空事务。

Alexander Pyhalov 提交了补丁的另一个修订版本,将 restrictinfos 下推到 CTE,并尝试在此过程中修剪分区。

Thomas Munro 提交了一个补丁,在 src/test/recovery 下添加一个新的 TAP 测试,该测试使用 wal_consistency_checking=all 运行回归测试。

Joel Jacobson 提交了一个补丁,修复了事件触发器的 pg_identify_object_as_address。

Takamichi Osumi 提交了一个补丁,用一个具有相同效果的断言替换了 ReorderBufferProcessTXN 中对 RelationIsLogicallyLogged 的检查。

David Rowley 提交了另一个修订版本的补丁,通过允许使用哈希表来加速带有 Consts 集合的 NOT IN()。

David Rowley 和 Yura Sokolov 交换了补丁,在 SMgr 中使用 simplehash.h 而不是 dynahash。

Julien Rouhaud 提交了一个补丁,修复了 query_id 计算中的一些疏漏。

Tom Lane 提交了一个补丁,要求 pq_getmessage 的调用者提供一个长度上限,并安装与 libpq 在服务器中相同的短消息与长消息启发式方法。