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,已发布。
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
进一步修复 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 推送了
amcheck: 在热备模式下跳过未记录的关系。让 verify_heapam.c 在热备模式下将未记录的关系视为简单的空关系。这使其与 verify_nbtree.c 一致,后者自错误修复提交 6754fe65a4 以来一直以相同方式处理未记录的关系。这是提交 866e24d47d 中的疏忽,该提交扩展了 contrib/amcheck 以检查堆关系。 顺便说一下,降低在报告像这样跳过关系时的详细程度,从 NOTICE 降到 DEBUG1。这是合适的,因为跳过行为只是一个实现细节,需要解决未记录的表在热备模式下没有其主分支的 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
Doc: 规范化 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 树验证函数具有相当不明确的影响——因此它们只是将其视为错误。由 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 错误:#17212 讨论:https://postgr.es/m/17212-34dd4a1d6bba98bf@postgresql.org 回溯补丁:14-,其中引入了 pg_amcheck。https://git.postgresql.org/pg/commitdiff/d2bf06db377967b0d671ae372d513806e2a28052
删除不稳定的 pg_amcheck 测试。最近的 pg_amcheck 错误修复提交 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://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 写入之前执行的任务。计划对这个文件进行更多重构,但此提交只是简单的代码移动,以使 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 写入相关的代码与仅因恢复结束而需要发生的其他事情分开,例如初始化依赖于在重做完成之前可能不准确的信息的共享内存数据结构。此提交没有实现该目标,但这朝着该方向迈出了一步。例如,一旦我们完成恢复,就会有几个不同的代码位将内容写入 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 推送