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

发布于 2021-10-18,作者:PWN
PWN

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 的 Kubernetes 操作符,用于 PostgreSQL,已发布

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。

已应用的补丁

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 祖先列表。现在必须首先更新祖先列表,因为 set_deparse_plan 会查阅它,并且一个调用点做错了。这个错误在大多数情况下被掩盖了,因为 explain.c 对祖先列表只使用一个 List 对象,在扫描计划时就地更新它,因此我们在需要之前意外地将正确的 List 分配给了 dpns->ancestors。只有当 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 子句中较早的某个子 SELECT 的输出,并且我们能够将该子 SELECT 展平到外部查询中,则复制到函数 RTE 中的表达式将遗漏 eval_const_expressions 的处理。如果这些表达式包含命名参数函数调用语法或带有默认参数的函数,则会导致执行时出现问题和可能的崩溃。如果查询包含任何显式的 JOIN 语法,则会掩盖此错误,这可能有助于解释为什么我们没有注意到。根据 Bernd Dorn 的错误 #17227。这是提交 7266d0997 中的一个疏忽,因此反向移植到该提交所在的 v13。讨论:https://postgr.es/m/17227-5a28ed1512189fa4@postgresql.org https://git.postgresql.org/pg/commitdiff/4d5f651f1d651c6fa79f9188e7b9a04654c7125a

  • 使 pg_dump 获取要转储的分区表的锁。很明显,一直以来都是这样打算的,但原始编码通过检查错误的数组元素来混淆了这一点。我们在 403a3d91c 中顺便修复了它,但后来被还原了,我们忘记保留此错误修复。大多数情况下,这相对无害,因为一旦我们锁定了任何分区表的叶子分区,就足以防止对分区表本身进行主要的 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 遗漏了为 pre-8.3 服务器的 getTriggers 查询添加 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 需要此修复。- 由于 v12 不支持 WITH OIDS 关系,使用 PG <= v11 作为旧版本时,脚本会失败。为了解决这个问题,它从构建场中窃取了一个方法,该方法使用 DO 块来更改所有标记为 WITH OIDS 的关系,从而允许 pg_upgrade 通过。这比在导致问题的关系上使用 ALTER TABLE 查询更具可移植性。此修复已修复到 v12,最初由 Andrew Dunstan 编写。- 将 v11 用作旧版本时,不使用 --extra-float-digits=0 会导致转储中出现大量差异,从而使整个内容无法读取。仅在使用 v11 作为旧版本时才这样做。此修复已修复到 v12。构建场代码已经使用了它。请注意,--wal-segsize 和 --allow-group-access 的添加会在使用 v10 或更旧版本在 initdb 时破坏脚本,因为这些是在 11 中添加的。10 将在明年结束生命周期,并且尚未有人抱怨过这些问题,因此没有对此进行任何处理。这意味着此提交修复了使用 test.sh 进行的升级测试,其中 v11 是最低的旧版本,一直到 HEAD,并且足以将此更改应用到 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 启动器对 pg_log_backend_memory_contexts() 更加敏感。以前,当 pg_log_backend_memory_contexts() 向 autovacuum 启动器发送请求时,可能需要几秒钟以上才能记录其内存上下文。因为处理 autovacuum 启动器收到的任何新中断的函数 (HandleAutoVacLauncherInterrupts) 不处理内存上下文的日志记录请求。此提交更改了该函数,使其可以处理请求,以使 autovacuum 启动器对 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 推送