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

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 Operator,用于 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

  • 进一步修复 EXPLAIN 中 SEARCH BREADTH FIRST 查询的处理。Commit 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 中的 planner 错误。如果 FROM 中的函数通过 lateral 引用 FROM 子句中较早的某个子 SELECT 的输出,并且我们可以将该子 SELECT 展平到外层查询中,那么复制到函数 RTE 中的表达式就未能通过 eval_const_expressions 进行处理。如果这些表达式包含命名参数的函数调用语法或带有默认参数的函数,这会导致执行时出现问题和可能的崩溃。查询包含任何显式 JOIN 语法时,此 bug 会被掩盖,这也许可以解释为什么我们没有注意到。根据 Bernd Dorn 的 bug #17227。这是 commit 7266d0997 中的疏漏,因此回溯到 v13(该 commit 引入了此功能)。讨论: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 核心转储。Commit f0e21f2f6 未能在 getTriggers 的查询中为 pre-8.3 服务器添加 tgisinternal 输出列。像该 commit 一样,回溯到 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 作为新版本时,由于 Makefile 规则移除了 testtablespace/,test.sh 完全中断。旧版本的 pg_regress 不支持 --make-tablespacedir,阻止了表空间的创建。为了解决这个问题,在脚本本身中创建这些目录很简单,但仅在涉及旧版本时才这样做。HEAD 和 REL_14_STABLE 需要此修复。- 当使用 PG <= v11 作为旧版本时,由于 v12 中不支持 WITH OIDS 关系,该脚本会失败。为了解决这个问题,它从 buildfarm 中窃取了一个方法,该方法使用 DO 块来更改所有标记为 WITH OIDS 的关系,从而允许 pg_upgrade 通过。这比使用 ALTER TABLE 查询有问题的关系更具可移植性。此修复回溯到 v12,最初由 Andrew Dunstan 编写。- 当使用 v11 作为旧版本时,不使用 --extra-float-digits=0 会导致转储中出现大量差异,使整个转储难以阅读。仅在使用 v11 作为旧版本时执行此操作。此修复回溯到 v12。buildfarm 代码已在使用此。请注意,添加 --wal-segsize 和 --allow-group-access 会在 initdb 时使用 v10 或更早版本中断脚本,因为这些选项在 11 中被添加。10 将于明年EOL,并且尚未有人抱怨这些问题,因此对此不做任何处理。这意味着此 commit 修复了使用 v11 作为最低旧版本、直到 HEAD 的 upgrade 测试,并且将其向下应用到 12 就足够了。旧转储和新转储仍然会产生差异,仍然需要手动检查,并且还可以做更多工作来减少噪音,但这允许测试以最少的干扰运行。我已经测试了此 commit 和 test.sh,使用 v11 作为最低版本,并应用于所有相关分支。请注意,此 commit 对正常使用 "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)没有处理记录内存上下文的请求。此 commit 更改了该函数,使其能够处理该请求,从而使 autovacuum launcher 对 pg_log_backend_memory_contexts() 更加响应。回溯到添加 pg_log_backend_memory_contexts() 的 v14。作者: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 推送