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, 已发布。
https://archives.postgresql.org/pgsql-jobs/2021-10/
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 推送了:
amcheck:在热备模式下跳过非日志关系。让 verify_heapam.c 在热备模式下将非日志关系视为空。这使其与 verify_nbtree.c 保持一致,后者自 bug 修复提交 6754fe65a4 以来一直以相同方式处理非日志关系。 这是提交 866e24d47d 的疏忽,该提交扩展了 contrib/amcheck 以检查堆关系。 顺便降低了报告关系被跳过的详细程度,从 NOTICE 降到 DEBUG1。这是合适的,因为跳过行为只是一个实现细节,为了解决非日志表在热备模式下其主 fork 没有 smgr 级别存储的事实。受影响的非日志关系应被视为"平凡地验证",而不是被跳过。它们被验证的意义与完全空的关系可以被验证的意义相同。 这种行为总体上似乎最不令人惊讶,因为副本上的非日志关系在副本被提升且热备结束时最初将为空。 作者:Mark Dilger mark.dilger@enterprisedb.com 审查者:Peter Geoghegan pg@bowt.ie 讨论: https://postgr.es/m/CAH2-Wzk_pukOFY7JmdiFLsrz+Pd3V8OwgC1TH2Vd5BH5ZgK4bA@mail.gmail.com 回溯移植:14-,引入 heapam 验证的版本。 https://git.postgresql.org/pg/commitdiff/292698f158ddb3f9a88f536e6eecb9e55d9619c9
文档:规范化 vacuum_multixact_failsafe_age ID。 作者:Pavel Luzanov p.luzanov@postgrespro.ru 讨论: https://postgr.es/m/c71a3cfc-a267-3d9f-1b44-fbd668d0ab10@postgrespro.ru 回溯移植:14-,引入故障安全的版本。 https://git.postgresql.org/pg/commitdiff/00c61a74bcdbc04a3db721d53c7aff62244da198
pg_amcheck:避免无用的验证尝试。避免使用不适合检查的关系调用 contrib/amcheck 函数。具体来说,不要尝试验证临时关系,或 pg_index 条目指示索引无效或未就绪的索引。这些关系不受任何 contrib/amcheck 函数支持,原因相当基本。例如,REINDEX CONCURRENTLY 的实现可以添加自己的"临时"pg_index 条目,这对 B-Tree 验证函数有相当不明确的含义,至少在一般情况下——所以它们只是将其视为错误。由 amcheck 调用者(在这种情况下是 pg_amcheck)在更高层级处理这种情况。 pg_amcheck 现在简单地将这些条件视为查询系统目录时的额外"可见性问题"。这有点随意。在所有可用替代方案中,它似乎问题最少。 作者:Mark Dilger mark.dilger@enterprisedb.com 报告者:Alexander Lakhin exclusion@gmail.com 审查者:Peter Geoghegan pg@bowt.ie 审查者:Robert Haas robertmhaas@gmail.com Bug: #17212 讨论: https://postgr.es/m/17212-34dd4a1d6bba98bf@postgresql.org 回溯移植:14-,引入 pg_amcheck 的版本。 https://git.postgresql.org/pg/commitdiff/d2bf06db377967b0d671ae372d513806e2a28052
移除不稳定的 pg_amcheck 测试。最近的 pg_amcheck bug 修复提交 d2bf06db 添加了一个测试用例,构建农场已显示它不可移植。保留它似乎也不是特别值得。移除它。 讨论: https://postgr.es/m/CAH2-Wz=7HKJ9WzAh7+M0JfwJ1yfT9qoE+KPa3P7iGToPOtGhXg@mail.gmail.com 回溯移植:14-,与原始提交一样。 https://git.postgresql.org/pg/commitdiff/cd3f429d9565b2e5caf0980ea7c707e37bc3b317
移除过时的 nbtree 去重注释。提交 2903f140 的后续。 https://git.postgresql.org/pg/commitdiff/b76c1d6e849779e4a5a6c24d159a42125e522154
Fujii Masao 推送了:
Peter Eisentraut 推送了:
psql:更多测试。为命令行选项处理和帮助输出添加一些基本测试,类似于我们为其他命令行程序所做的。这也为以后放置更多一次性测试用例创建了一个位置。 讨论: https://www.postgresql.org/message-id/2570e2ae-fa0f-aac9-f72f-bb59a9983a20@enterprisedb.com https://git.postgresql.org/pg/commitdiff/c0280bc3edeb9e9958efc14083b6f301d2ef79d5
psql:添加复制命令处理的测试。为不支持的复制命令响应的清洁处理添加测试。这曾经被意外破坏过,而且它足够不寻常,在手动测试时很容易被遗忘。 讨论: https://www.postgresql.org/message-id/2570e2ae-fa0f-aac9-f72f-bb59a9983a20@enterprisedb.com https://git.postgresql.org/pg/commitdiff/67c069848a998de1436cad2d67baedbf31c3a28c
psql:修复测试。该测试在 getopt() 不支持选项前的非选项参数的平台上不工作。 https://git.postgresql.org/pg/commitdiff/d9ddc50bafc062ec1ae7f98b886b7950102d87fc
psql:修复一些 scan-build 警告。一个反复出现的警告是 scan-build 认为如果在查询处理期间 \timing 设置发生变化,后处理可能读取垃圾时间值。这在目前可能不可能,但鉴于代码结构也并非完全不可想象。因此通过小的重构来消除此警告,使其更健壮。 其他警告是一些容易删除的死存储。 讨论: https://www.postgresql.org/message-id/2570e2ae-fa0f-aac9-f72f-bb59a9983a20@enterprisedb.com https://git.postgresql.org/pg/commitdiff/390edeeb570c01de1a14e2985ffed96de001e42e
修复不正确的格式占位符。 https://git.postgresql.org/pg/commitdiff/780054bf31a0a6ba781f46c454f0116efee8a74c
Robert Haas 推送了:
重构 basebackup.c 的 _tarWriteDir() 函数。有时,我们将数据目录中找到的符号链接替换为 tar 文件中的实际目录。_tarWriteDir 既负责进行此替换,也负责将结果目录的 tar 头写入 tar 文件。让它只做第一件事,并重命名为 convert_link_to_directory。 此源文件计划进行更大规模的重构,但这一小部分似乎适合独立提交。 讨论:
http://postgr.es/m/CA+Tgmobz6tuv5tr-WxURe5JA1vVcGz85k4kkvoWxcyHvDpEqFA@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/967a17fe2fa77b61061c8fb1183f64a5df4e080a
将一些恢复结束代码从 StartupXLOG() 中重构出来。创建一个新函数 PerformRecoveryXLogAction() 并将写入恢复结束记录或请求检查点的代码移到那里。 同时创建一个新函数 CleanupAfterArchiveRecovery() 来执行一些我们在实际退出归档恢复后但开始接受新 WAL 写入之前要做的任务。 计划对此文件进行更多重构,但此提交只是直接的代码移动,使 StartupXLOG() 稍微短一些且更容易理解。 Robert Haas 和 Amul Sul 讨论: http://postgr.es/m/CAAJ_b97abMuq=470Wahun=aS1PHTSbStHtrjjPaD-C0YQ1AqVw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/6df1543abfed6f6a86b76a48fa11a6f019111c01
推迟一些与允许 WAL 相关的恢复结束操作。CreateOverwriteContrecordRecord()、UpdateFullPageWrites()、PerformRecoveryXLogAction() 和 CleanupAfterArchiveRecovery() 在 StartupXLOG() 中被移到稍后的位置。这是为未来的补丁做准备工作,该补丁希望允许恢复在某一时刻结束,而稍后才开始允许 WAL 写入。为此,需要将与允许 WAL 写入有关的代码与仅因恢复结束而需要发生的其他事情分开,例如初始化依赖于在 redo 完成之前可能不准确的信息的共享内存数据结构。 此提交没有实现该目标,但它是朝那个方向迈出的一步。例如,有几段不同的代码在恢复完成后将东西写入 WAL,有了这个更改,这些代码比以前更接近彼此,中间穿插的不相关代码更少。 Robert Haas 和 Amul Sul 讨论: http://postgr.es/m/CAAJ_b97abMuq=470Wahun=aS1PHTSbStHtrjjPaD-C0YQ1AqVw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/811051c2e7af1b030467760baf7ee0f4a22bc992
shm_mq:减少更新 mq_bytes_written 的频率。不要更新 shm_mq 的 mq_bytes_written,直到我们写入的数据量大于环大小的 1/4,除非 shm_mq_send(v) 的调用者请求在消息末尾刷新。这大大减少了 SetLatch() 的调用次数,以及 CPU 缓存未命中的次数,从而使 shm_mq 显著更快。 Dilip Kumar,由 Zhihong Yu 和 Tomas Vondra 审查。一些小的外观修改由我完成。 讨论: http://postgr.es/m/CAFiTN-tVXqn_OG7tHNeSkBbN+iiCZTiQ83uakax43y1sQb2OBA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/46846433a03dff4f2e08c8a161e54a842da360d6
Etsuro Fujita 推送了:
Álvaro Herrera 推送了:
Jeff Davis 推送了:
Andrew Dunstan 推送了: