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

PostgreSQL 每周新闻 - 2021 年 5 月 30 日

发布于 2021-06-10,作者 PWN
PWN

PostgreSQL 每周新闻 - 2021 年 5 月 30 日

pgSCV,一个与 Prometheus 兼容的 PostgreSQL 监控代理和指标导出器,已发布

Pgpool-II 4.2.3、4.1.7、4.0.14、3.7.19 和 3.6.26,一个 PostgreSQL 的连接池和语句复制系统,已发布

sqlite_fdw 1.2.0 已发布

Crunchy PostgreSQL Operator 4.7.0,一个在 Kubernetes 上部署和管理开源 PostgreSQL 集群的系统,已发布

pgAdmin4 5.3,一个 PostgreSQL 的 Web 和原生 GUI 控制中心,已发布

InfluxDB fdw 1.0.0 已发布 https://github.com/pgspider/influxdb_fdw

griddb_fdw 2.0 已发布

PostgreSQL 产品新闻

五月 PostgreSQL 工作岗位

https://archives.postgresql.org/pgsql-jobs/2021-05/

PostgreSQL 相关新闻

Planet PostgreSQL:https://planet.postgresql.org/

本周 PostgreSQL 周报由 David Fetter 提供。

请在太平洋标准时间(PST8PDT)周日晚上3:00之前将新闻和公告发送至 david@fetter.org。

已应用补丁

David Rowley 提交

Tom Lane 提交

  • 文档:将一些 catalogs.sgml 条目移到正确的位置。pg_statistic_ext_data.stxdexpr 被列在错误的 catalog 下,pg_stats_ext.exprs 也是。另外还有一个针对 pg_statistic_ext_data.stxexprs 的错误条目。显然是 commit a4d75c86b 中的合并失败。作者:Guillaume Lelarge 和 Tom Lane 讨论:https://postgr.es/m/CAECtzeUHw+w64eUFVeV_2FJviAw6oZ0wNLkmU843ZH4hAQfiWg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/713a431c781fbfe1a22fae4991836077f0f4c513

  • 修复 inline_function() 中未初始化变量的使用。Commit e717a9a18 引入了一个绕过 get_expr_result_type 调用的代码路径,这不好,因为我们需要它的 rettupdesc 结果来传递给 check_sql_fn_retval。我们之所以没有立即注意到,是因为 check_sql_fn_retval 使用该参数的代码路径在此上下文中很难达到。但这并非不可能,而且无论如何 inline_function 不应该假设 check_sql_fn_retval 不需要该值。为了修复,将 get_expr_result_type 移出 if 块,这反过来需要将 dummy FuncExpr 的构建也移出。根据 Ranier Vilela 的报告。(我对其缺乏任何编译器投诉感到困惑...)讨论:https://postgr.es/m/CAEudQAqBqQpQ3HruWAGU_7WaMJ7tntpk0T8k_dVtNB46DqdBgw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e30e3fdea873e4e9517c490232ea1d3bcef6c643

  • 重新思考 pg_attribute.attcompression 的定义。将 '\0' (InvalidCompressionMethod) 重新定义为“如果需要压缩,则使用 default_toast_compression 的当前设置”。这使得 '\0' 成为适用于任何数据类型的默认选择,大大简化了初始化 tupledescs 等的代码路径。这看起来也更用户友好,因为现在默认的压缩选择不会迁移到表定义中,这意味着更改 default_toast_compression 通常足以改变安装的行为;无需费力地为每个列发出 ALTER SET COMPRESSION 命令。在此过程中,修复了每列压缩功能的几个次要错误和文档问题。采用更健壮的 API 来设置 SetIndexStorageProperties 和 GetAttributeCompression。增加 catversion,因为 attcompression 的典型内容现在将不同。我们可以不这样做,但确保 v14 安装在此问题上达成一致似乎更好。(我们已经为 beta2 强制 initdb 了。)讨论:https://postgr.es/m/626613.1621787110@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e6241d8e030fbd2746b3ea3f44e728224298f35b

  • 减小 genbki.pl 保留的 OID 范围。Commit ab596105b 将 FirstBootstrapObjectId 从 12000 增加到 13000,但我们对此有所顾虑。增加其与 FirstNormalObjectId 之间的差距令人担忧,因为 initdb 在 collation 对象期间消耗的 OID 数量难以预测。我们可以通过放弃这些 OID 必须全局唯一的假设来改善这种情况。为它们在每个 catalog 中唯一就足够了。(任何对此不满意的情况都是错误的,因为一旦 OID 计数器回绕,就无法保证比每个 catalog 的唯一性更多。)有了这个改变,genbki.pl 分配的 OID(从 10000 开始)略小于

  • 这使得我们可以有合理信心将 FirstBootstrapObjectId 恢复到 12000,并且在未来许多年内都足够。目前,我们没有放弃手工分配的 OID(小于 10000)是全局唯一的期望。总有一天这可能会是必要的,但似乎还需要数年时间。这对于 v14 来说已经很晚了,但现在做似乎值得,这样下游软件就不用处理 FirstBootstrapObjectId 更改的后果了。无论如何,我们已经为 beta2 强制 initdb 了,所以再增加一个 catversion 也没什么坏处。讨论:https://postgr.es/m/1665197.1622065382@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/a4390abecf0f5152cff864e82b67e5f6c8489698

  • 文档:改进 libpq 服务文件文档,避免过度指定路径。澄清 libpq.sgml 中关于服务文件位置和语义的描述。避免使用反引号括起来的 pg_config 调用来描述路径;这在 Windows 上不起作用,即使在 Unix 上,也不是所有读者都能立即理解这种惯用法。不要过度指定 include 文件的位置,而是只写在 #include 指令中使用的内容。在某些安装中,这些位置的先前文本不正确,具体取决于“postgresql”在安装路径中的位置。我们引用用户主目录的约定似乎是“~”,因此将一个拼写为“$HOME”的地方改为“~”。install-windows.sgml 遵循平台约定,使用“\”表示文件路径,因此将一个使用“/”的地方改为“\”。作者:Haiying Tang 和 Tom Lane 讨论:https://postgr.es/m/162149020918.26174.7150424047314144297@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/ba356a397de565c014384aa01a945aab7d50928c

Peter Geoghegan 提交

Michaël Paquier 提交

  • 禁止 SSL 重协商。SSL 重协商自 48d23c72 起已被禁用,但这并不能阻止服务器遵守愿意使用重协商的客户端。在过去的几年里,重协商已经出现了一系列安全问题和缺陷(例如最近的 CVE-2021-3449),并且有可能通过尝试重协商的客户端来崩溃后端。此提交采取了额外的步骤,通过在后端禁用重协商,方式与 SSL 压缩 (f9264d15) 或票据 (97d3a0b0) 相同。OpenSSL 1.1.0h 添加了一个名为 SSL_OP_NO_RENEGOTIATION 的选项,可以实现这一点。在旧版本中,有一个名为 SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS 的选项,但它是未公开的,并且可以在 TLS 连接打开时创建的 SSL 对象中设置,但我决定不使用它,因为它感觉更难依赖,而且不是官方的。请注意,此选项在 OpenSSL < 1.1.0h 中不可用,因为应用程序对 `*SSL` 对象的内部内容是隐藏的。SSL 重协商涉及 TLSv1.2 及以下协议。根据 Robert Haas 的原始报告,并基于 Andres Freund 的建议的补丁。作者:Michael Paquier 审阅者:Daniel Gustafsson 讨论:https://postgr.es/m/YKZBXx7RhU74FlTE@paquier.xyz 向后移植到:9.6 https://git.postgresql.org/pg/commitdiff/01e6f1a842f406170e5f717305e4a6cf0e84b3ee

  • 修复 VACUUM FULL/CLUSTER 中解压压缩值时的内存泄漏。VACUUM FULL 和 CLUSTER 可用于强制使用 toastable 列的现有压缩方法,如果当前存储的值是用与列定义的raseña方法不匹配的方法压缩的。在重写 toast 值时负责解压和重新压缩的代码留下了解压后的值,导致 TopTransactionContext 中的内存累积。处理大型关系时,这可能导致系统内存不足。元组重写后不需要解压后的值,此提交确保进行必要的清理。由 bbe0a81d 引入的问题。顺便对该区域的注释进行了少量重新排序。报告人:Andres Freund 分析者:Andres Freund 作者:Michael Paquier 审阅者:Dilip Kumar 讨论:https://postgr.es/m/20210521211929.pcehg6f23icwstdb@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/fb0f5f0172edf9f63c8f70ea9c1ec043b61c770e

  • 修复 heapam.c 中的拼写错误。作者:Hou Zhijie 讨论:https://postgr.es/m/OS0PR01MB571612191738540B27A8DE5894249@OS0PR01MB5716.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/190fa5a00a8f9ecee8eef2c8e26136b772b94e19

  • 文档:修复文档和 postgresql.conf.sample 中一些 GUC 的描述。以下参数的描述(PGC_POSTMASTER 或 PGC_SIGHUP)不准确或不正确:- autovacuum_work_mem(文档,自 9.6 起)- huge_page_size(文档,自 14 起)- max_logical_replication_workers(文档,自 10 起)- max_sync_workers_per_subscription(文档,自 10 起)- min_dynamic_shared_memory(文档,自 14 起)- recovery_init_sync_method(postgresql.conf.sample,自 14 起)- remove_temp_files_after_crash(文档,自 14 起)- restart_after_crash(文档,自 9.6 起)- ssl_min_protocol_version(文档,自 12 起)- ssl_max_protocol_version(文档,自 12 起)此提交调整了所有这些参数的描述,以使其与对其他参数的使用方法更加一致。审阅者:Justin Pryzby 讨论:https://postgr.es/m/YK2ltuLpe+FbRXzA@paquier.xyz 向后移植到:9.6 https://git.postgresql.org/pg/commitdiff/2941138e60fc711bd221b3264807f36cc079dfbb

  • 修复使用 GSSAPI/Kerberos 构建时的 MSVC 脚本。Windows 上 Kerberos 的可交付文件安装的路径与我们的 MSVC 脚本不匹配。首先,我们的脚本中的 include 文件夹命名为“inc/”,但上游 MSI 使用“include/”。其次,由于库的名称不同,64 位环境的构建会失败。此提交调整了 MSVC 脚本以兼容上游的最新安装,并且我已检查过 32 位和 64 位安装的编译都能正常工作。特别感谢 Kondo Yuta 在 hamerkop 中协助调查 GSS 编译的错误配置。报告人:Brian Ye 讨论:https://postgr.es/m/162128202219.27274.12616756784952017465@wrigleys.postgresql.org 向后移植到:9.6 https://git.postgresql.org/pg/commitdiff/025110663448a8c877f4b591495f2e5d187d8936

Amit Kapila 提交

Peter Eisentraut 提交

Álvaro Herrera 提交

Andrew Dunstan 推送

Thomas Munro 推送

待处理补丁

Fabien COELHO 和 Aleksander Alekseev 交换了补丁,用更适合 64 位时代的东西替换了 rand48 伪随机数生成器。

Greg Nancarrow 和 Pavel Borisov 交换了补丁,以修复并行工作进程的断言失败和核心转储。

Vigneshwaran C 发送了另一个版本的补丁,为 PUBLICATION 添加了模式级别的支持。

Hou Zhijie 和 Amit Langote 交换了补丁,在分区键为常量的情况下跳过分区元组路由。

Dilip Kumar、Tsutomu Yamada 和 Kyotaro HORIGUCHI 交换了补丁,以修复恢复过程中的竞态条件。

Hou Zhijie 发送了另一个版本的补丁,使 INSERT ... SELECT 能够并行化。

Tom Lane 发送了两个版本的补丁,以修复 CALL 和带有仅输出参数的过程之间的不兼容问题。

Justin Pryzby 发送了另一个版本的补丁,使 WAL 压缩方法可插拔,并默认为 lz4。

Andy Fan 发送了一个补丁,当 root->simple_rte_array 为真时,使用 planner_rt_fetch 而不是 rt_fetch。

Ajin Cherian 发送了五个后续版本的补丁,用于跳过逻辑复制的空事务。

Mark Dilger 发送了另一个版本的补丁,将超级用户任务委派给新的安全角色。

Hou Zhijie、Bharath Rupireddy 和 Tomáš Vondra 交换了补丁,以确保 postgres_fdw 的批处理不会使用过多的参数。

Bharath Rupireddy 发送了一个补丁,提供了 TDE 随机数大小作为 initdb 选项,将 TDE 随机数字节添加到 page pd_special 结构,并调整了测试以考虑可配置的 TDE 随机数大小。

Bharath Rupireddy 发送了另一个版本的补丁,以消除“非负数”错误消息中的歧义。

Antonin Houska 发送了一个补丁,以缩小 concurrent UPDATE 重新启动 heap_lock_tuple() 的情况,从而减少不必要的相同调用。

Greg Sabino Mullane 发送了一个补丁,通过避免在 checksum 已设置为预期值时写入来加速 pg_checksums。

Michaël Paquier 发送了一个补丁,旨在修复一个在 2PC 使用时,主备节点提升时快照不正确的 bug。

Bharath Rupireddy 发送了两个后续版本的补丁,以检查重复选项并在 CREATE COLLATION 中找到它们时报错。

Andrey V. Lepikhov 发送了一个补丁,教优化器考虑将非分区表与分区表的每个分区进行分区连接。

Andrey V. Lepikhov 发送了另一个版本的补丁,通过新的等价类来消除不必要的自连接。

Peter Eisentraut 发送了一个补丁,以修复 hba 文件解析中的 RADIUS 错误报告。

Vigneshwaran C 和 Bharath Rupireddy 交换了补丁,以改进 publication 错误消息。

Tom Lane 发送了另一个版本的补丁,用固定范围检查替换 pg_depend PIN 条目。

Kyotaro HORIGUCHI 发送了两个版本的补丁,将令人困惑的“括号”用法改为更清晰的措辞,并为(多)范围类型的尾随垃圾添加了测试用例。

Bharath Rupireddy 和 Hou Zhijie 交换了补丁,使 CREATE TABLE AS 中的并行插入成为可能。

Dilip Kumar 发送了一个补丁,以修复解码带有 toast 的投机性插入时的内存泄漏。

Peter Geoghegan 发送了一个补丁,用于通用化 VACUUM 的 INDEX_CLEANUP 选项,使用户可以禁用 commit 5100010e 添加的索引 vacuum 绕过优化,以及未来可能添加的任何类似优化。

Paul Guo 发送了另一个版本的补丁,用于仅 fsync 受影响的文件/目录,并使用 copy_file_range() 进行文件复制(在 pg_rewind 中)。

Takamichi Osumi 发送了另一个版本的补丁,用于记录长时间运行查询的计划。

Daniel Gustafsson 发送了另一个版本的补丁,以支持 NSS 作为 libpq TLS 后端。

Etsuturo Fujita 发送了一个补丁,用于修复 PostgreSQL FDW 中异步追加的 rescans。

Vigneshwaran C 发送了一个补丁,添加了别名类型 regpublication 和 regsubscription。

Fabien COELHO 发送了一个补丁,以减少 psql echo 代码中的一些重复。

Laurenz Albe 发送了另一个版本的补丁,以扩展 PostgreSQL 扩展编码和后台工作进程开发的文档,至少简要提及关键主题,如分配、中断处理、退出回调、事务回调、PG_TRY()/PG_CATCH()、资源所有者、事务和快照状态等,并提供更多学习资料的链接。

Tom Lane 发送了一个补丁,以减少待处理的 inval 消息的内存消耗。

Andreas Karlsson 发送了一个补丁,以缩小 GISTSTATE。

Yura Sokolov 发送了一个补丁,以清理页面中的空白区域。

Tomáš Vondra 发送了一个补丁,用于回滚部分 COPY FREEZE 改进,特别是调整 heap_multi_insert,并删除 39b66a91bd 的大部分内容(除了 heap_xlog_multi_insert 位)。

Thomas Munro 发送了两个版本的补丁,以支持 macOS 上的直接 I/O。