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

发布于 2021-10-18,PostgreSQL Global Development Group
PG 每周新闻

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

PostgreSQL 产品新闻

psycopg2 3.0.0,一个 PostgreSQL 的 Python 连接器, 已发布

pg_partman 4.6.0,一个分区表管理系统, 已发布

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

Percona Distribution for PostgreSQL Operator 1.0.0,一个基于 Crunchy Data 的 PostgreSQL Kubernetes operator, 已发布

PostgreSQL 十月招聘信息

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

PostgreSQL 新闻报道

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

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

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

已应用的补丁

Tom Lane 推送了:

  • 文档:更新 src/test/perl/README 中的测试方法。之前的文本没有对我们关于 TAP 测试可移植性的策略提供任何清晰的解释。使用 perlbrew 的方法也有一些问题:它导致非共享的 libperl(阻止了 plperl 的测试),并且导致一些模块更新到当前版本,而该方法的目的是构建旧环境。 讨论: https://postgr.es/m/E1mYY6Z-0006OL-QN@gemulon.postgresql.org https://git.postgresql.org/pg/commitdiff/3eb1f4d09745433c70ccac411cad24d0374b9c3b

  • 进一步修复 SEARCH BREADTH FIRST 查询的 EXPLAIN。提交 3f50b8263 有一个疏忽:以前,要解析附加到计划节点的表达式,只需要在调用 set_deparse_plan 的同时更新 deparse_namespace 的 ancestors 列表。现在需要更新 ancestors 列表,因为 set_deparse_plan 会查询它,有一个调用点弄错了。 这个错误在大多数情况下被掩盖了,因为 explain.c 只使用一个 List 对象作为 ancestors 列表,在扫描计划时就地更新它,因此在需要之前我们意外地已经为 dpns->ancestors 设置了正确的 List。只有当 WorkTableScan 节点是我们尝试解析子表达式的第一个节点时才会失败。 根据 Markus Winand 的报告。和之前的补丁一样,回溯移植到 v14。 讨论: https://postgr.es/m/648B0505-AA57-42C2-A2DA-E551DE46FA15@winand.at https://git.postgresql.org/pg/commitdiff/39ae0ef8561362304ee512963aa51d5a705e5616

  • 让 configure 检查所需的最低版本 IPC::Run。根据 3eb1f4d09 相关的讨论,让 configure 验证可用的 IPC::Run 版本至少为 0.79,这是商定的最低版本。这不太可能再影响到任何人,但作为文档是有用的。(基于此,没有太大的回溯移植需要。) 为了一致性,也为我们显式检查的另一个 Perl 模块 Time::HiRes 提供最低版本。我使用了随 Perl 5.8.3 一起发布的版本。 讨论: https://postgr.es/m/E1mYY6Z-0006OL-QN@gemulon.postgresql.org https://git.postgresql.org/pg/commitdiff/4a235efddaa78ec78a47614ddc6161644e089290

  • 修复将子查询表达式拉入函数 RTE 时的规划器错误。如果 FROM 中的函数横向引用 FROM 子句中更早的某个子查询的输出,并且我们能够将该子查询扁平化到外部查询中,那么复制到函数 RTE 中的表达式遗漏了 eval_const_expressions 的处理。如果此类表达式包含命名参数函数调用语法或具有默认参数的函数,这会导致问题和可能的崩溃。如果查询包含任何显式 JOIN 语法,该 bug 会被掩盖,这可能有助于解释为什么我们之前没有注意到。 根据 Bernd Dorn 的 Bug #17227。这是提交 7266d0997 中的疏忽,所以回溯移植到引入它的 v13。 讨论: https://postgr.es/m/17227-5a28ed1512189fa4@postgresql.org https://git.postgresql.org/pg/commitdiff/4d5f651f1d651c6fa79f9188e7b9a04654c7125a

  • 使 pg_dump 获取要转储的分区表上的锁。这显然是一直以来的意图,但原始编码错误地检查了错误的数组元素。我们在 403a3d91c 中顺便修复了它,但后来那个提交被撤销了,我们忘记了保留此 bug 修复。 大多数情况下这相对无害,因为一旦我们锁定了分区表的任何叶分区,那就足以阻止对分区表本身的重大 DDL。然而,没有子分区的分区表会在没有任何相关锁的情况下被转储,可能导致转储失败或输出不一致。 与 403a3d91c 不同,没有版本控制问题,因为每个拥有分区表的服务器版本都允许你锁定一个。回溯移植到引入分区表的 v10。 讨论: https://postgr.es/m/1018205.1634346327@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e2ff7d9a83d4b489806281dc6dfce88510b40ad7

  • 避免从 pre-8.3 服务器转储时 pg_dump 的核心转储。提交 f0e21f2f6 遗漏了在 getTriggers 对 pre-8.3 服务器的查询中添加 tgisinternal 输出列。 回溯移植到 v11,与那个提交一样。 https://git.postgresql.org/pg/commitdiff/40dfac4fc4776213a02291f13046d36e318f2629

Michaël Paquier 推送了:

  • 清理更多使用 "(expr) ? true : false" 的代码。这与 fd0625c 类似,处理了任何值得清理的剩余代码路径。这也更改了一些使用相反表达式模式的案例。 作者:Justin Pryzby、Masahiko Sawada 讨论: https://postgr.es/m/CAD21AoCdF8dnUvr-BUWWGvA_XhKSoANacBMZb6jKyCk4TYfQ2Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/68f7c4b57a27dbcd3e93ba3ff7b0b49664b25e09

  • 在 TAP 测试中添加更多 $Test::Builder::Level。增加报告的调用栈层级对调试目的很有用,因为它允许控制报告测试的哪个部分确切失败,特别是当测试使用调用 Test::More 例程的子程序构建时。在调试得到改善的地方添加了更多 $Test::Builder::Level 的增量(例如对于某些路径如 pg_rewind 使用长子程序的情况则没有意义)。 基于 Andrew Dunstan 的建议和我们双方的措辞在 src/test/perl/README 中添加了注释。$Test::Builder::Level 的使用从 12 版本开始扩散,因此向下回溯移植到此版本。 审查者:Andrew Dunstan、Peter Eisentraut、Daniel Gustafsson 讨论: https://postgr.es/m/YV1CCFwgM1RV1LeS@paquier.xyz 回溯移植至:12 https://git.postgresql.org/pg/commitdiff/f9c4cb686800d46ef9e9e90ed5133493b23962af

  • 修复跨不同主要版本的 pg_upgrade 测试。这修复了使用 pg_upgrade 的 test.sh 跨不同主要版本进行升级时导致不同中断或烦恼的一组问题:- 当使用 v14 作为新版本时 test.sh 完全崩溃,因为删除了 testtablespace/ 作为 Makefile 规则。旧版本的 pg_regress 不支持 --make-tablespacedir,阻止了表空间的创建。为了修复这个问题,在脚本本身中创建这些目录就足够简单了,但仅在涉及旧版本时才这样做。此修复在 HEAD 和 REL_14_STABLE 上需要。- 当使用 PG <= v11 作为旧版本时脚本会失败,因为 v12 不支持 WITH OIDS 关系。为了修复这个问题,这借鉴了构建农场的一种方法,使用 DO 块来更改所有标记为 WITH OIDS 的关系,允许 pg_upgrade 通过。这比在导致问题的关系上使用 ALTER TABLE 查询更具可移植性。这从 v12 开始修复,最初由 Andrew Dunstan 编写。- 不在 v11 作为旧版本时使用 --extra-float-digits=0 会导致转储中出现大量差异,使整个过程不可读。这仅在使用 v11 作为旧版本时才这样做。这从 v12 开始修复。构建农场代码已经使用了它。 注意,在 initdb 时添加 --wal-segsize 和 --allow-group-access 会在使用 v10 或更早版本时破坏脚本,因为这些选项是在 11 中添加的。10 将在明年 EOL,没有人抱怨过这些问题,所以不对此做任何处理。 这意味着此提交修复了使用 v11 作为最低旧版本直到 HEAD 使用 test.sh 的升级测试,将此更改应用到 12 就足够了。旧转储和新转储仍然会产生差异,仍然需要手动检查,还可以做更多来减少噪音,但这允许测试以相当少量的差异运行。 我已经在所有应用此补丁的分支上用 v11 作为最低版本测试了此提交和 test.sh。 注意此提交对使用简单"make check"运行的正常 pg_upgrade 测试没有影响。 作者:Justin Pryzby、Andrew Dunstan、Michael Paquier 讨论: https://postgr.es/m/20201206180248.GI24052@telsasoft.com 回溯移植至:12 https://git.postgresql.org/pg/commitdiff/fa66b6dee0843d2bca5bf9c9b8b7be32defbffae

  • 修复 CREATE TYPE 中多范围类型的释放后使用。代码释放了存储在解析树中的多范围类型函数名称,但它不应该这样做。事件触发器可能会通过 ddl_command_end 事件查看这样一个损坏的解析树。 作者:Alex Kozhemyakin、Sergey Shinderuk 审查者:Peter Eisentraut、Michael Paquier 讨论: https://postgr.es/m/d5042d46-b9cd-6efb-219a-71ed0cf45bc8@postgrespro.ru 回溯移植至:14 https://git.postgresql.org/pg/commitdiff/5b0e7fe1d67235a092be1132bc5c97f1d7f29aaf

Peter Geoghegan 推送了:

Fujii Masao 推送了:

  • 使 autovacuum launcher 对 pg_log_backend_memory_contexts() 更具响应性。此前,当 pg_log_backend_memory_contexts() 向 autovacuum launcher 发送请求时,记录其内存上下文可能需要几秒钟以上。因为处理 autovacuum launcher 收到的任何新中断的函数(HandleAutoVacLauncherInterrupts)没有处理记录内存上下文的请求。此提交更改了该函数使其处理该请求,以使 autovacuum launcher 对 pg_log_backend_memory_contexts() 更具响应性。 回溯移植到 v14,添加 pg_log_backend_memory_contexts() 的版本。 作者:Koyu Tanigawa 审查者:Bharath Rupireddy、Atsushi Torikoshi 讨论: https://postgr.es/m/0aae3e074face409b35153451be5cc11@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/e3e29cec10d15bbcedc6b41887d8f4e138d719bd

Peter Eisentraut 推送了:

Robert Haas 推送了:

Etsuro Fujita 推送了:

Álvaro Herrera 推送了:

Jeff Davis 推送了:

Andrew Dunstan 推送了: