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,已发布。
https://archives.postgresql.org/pgsql-jobs/2021-10/
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 提交
amcheck:在 Hot Standby 中跳过未记录的表。让 verify_heapam.c 在 Hot Standby 模式下将未记录的表视为空。这使其与 verify_nbtree.c 一致,后者自 bug 修复 commit 6754fe65a4 以来一直以相同方式处理未记录的表。这是 commit 866e24d47d 的疏漏,该 commit 将 contrib/amcheck 扩展到检查堆表。顺便,降低了报告某个表被这样跳过时的详细程度,从 NOTICE 降到 DEBUG1。这是合适的,因为跳过行为只是一个实现细节,用于绕过未记录表在 Hot Standby 模式下没有 smgr 级别存储的情况。受影响的未记录表应被视为“已验证”,而不是被跳过。它们在意义上与完全空的表被验证相同。总的来说,这种行为似乎最少有问题,因为复制机上的未记录表最初将是空的,当复制机被提升并且 Hot Standby 结束时。作者:Mark Dilger mark.dilger@enterprisedb.com 审阅者:Peter Geoghegan pg@bowt.ie 讨论:https://postgr.es/m/CAH2-Wzk_pukOFY7JmdiFLsrz+Pd3V8OwgC1TH2Vd5BH5ZgK4bA@mail.gmail.com 回溯:14-,即引入堆 am 验证的版本。 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-,即引入 failsafe 的版本。 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 修复 commit d2bf06db 添加了一个测试用例,该用例在 buildfarm 中显示为不可移植。它似乎也不太值得保留。将其删除。讨论:https://postgr.es/m/CAH2-Wz=7HKJ9WzAh7+M0JfwJ1yfT9qoE+KPa3P7iGToPOtGhXg@mail.gmail.com 回溯:14-,与原始 commit 相同。 https://git.postgresql.org/pg/commitdiff/cd3f429d9565b2e5caf0980ea7c707e37bc3b317
删除过时的 nbtree 去重注释。后续 commit 2903f140。 https://git.postgresql.org/pg/commitdiff/b76c1d6e849779e4a5a6c24d159a42125e522154
Fujii Masao 提交
Peter Eisentraut 提交
psql:更多测试。添加一些基本的命令行选项处理和帮助输出测试,类似于我们为其他命令行程序所做的。这也为以后放置更多一次性测试用例提供了一个地方。讨论:https://postgresql.ac.cn/message-id/2570e2ae-fa0f-aac9-f72f-bb59a9983a20@enterprisedb.com https://git.postgresql.org/pg/commitdiff/c0280bc3edeb9e9958efc14083b6f301d2ef79d5
psql:添加复制命令处理测试。添加一个测试,用于干净地处理不支持的复制命令响应。这曾经被意外破坏过,而且它似乎足够不寻常,以至于手动测试时很容易忘记。讨论:https://postgresql.ac.cn/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://postgresql.ac.cn/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 写入之前执行的任务。计划对该文件进行更多重构,但此 commit 只是简单的代码移动,以使 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 写入的代码与仅仅因为恢复结束而需要执行的其他事情分开,例如初始化依赖于重做完成之前可能不准确的信息的共享内存数据结构。此 commit 未能实现该目标,但它是朝着该方向迈出的一步。例如,在我们完成恢复后,有几个不同的代码片段会将内容写入 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 的更新频率。只有在写入的数据量超过环大小的 1/4 时才更新 shm_mq 的 mq_bytes_written,除非 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 推送