选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

PostgreSQL 博览 RSS 订阅

当天收录 31 条。

存储层删错文件的缺陷已修进主干

Heikki LinnakangasPostgreSQL hackers

Heikki Linnakangas 已把一处存储层的错删修复推进 master。mdunlinkfiletag 本该按传入的 fork 与段号删文件,实际删掉的却是主 fork 的第 0 段。Thomas Munro 建议反过来做:不去泛化 register_unlink_segment(),而是拿掉它的 fork 与段参数,因为外部代码没有理由往 md.c 的队列里塞删除请求。Matthias van de Meent 确认那条分支只在主 fork 上才走到。

导入畸形范围直方图会算出负选择率甚至崩溃

Ewan YoungPostgreSQL hackers

Ewan Young 报告 pg_restore_attribute_stats() 接收范围边界直方图时不做校验。compute_range_stats() 维持着两条不变式:直方图里不能有空 range,上下界都要升序排列。range 与 multirange 的选择率估算器依赖这两条,一旦被违反,轻则算出错误甚至为负的选择率,重则在带断言的构建里直接让进程崩溃。补丁改为导入时校验直方图,对不合法输入以 WARNING 拒绝,与其他统计信息的处理方式一致。

索引预取补丁 V29 让点查询少调一次接口

Peter GeogheganPostgreSQL hackers

Peter Geoghegan 发出索引预取补丁的 V29,因为 V28 已经打不干净。这一版有两项微优化:索引访问方法可以在 amgetbatch 返回时直接设置 knownEndBackward 与 knownEndForward,让简单点查询只调一次 amgetbatch;索引元组计数改成每批计一次而不是每元组一次,语义与位图索引扫描一致。V29 还带了一个 EXPLAIN (ANALYZE, IO) 补丁,索引扫描做 IO 预取时可以看到读流的诊断信息。

有人提议把共享缓冲区的查找表换掉 dynahash

Dhruv AronPostgreSQL hackers

来自 Databricks 的 Dhruv Aron 提议把共享缓冲区的查找表从 dynahash 换成专用哈希表:目录、段、桶链、空闲列表那几层结构,对这个固定大小的场景太重了。基准显示插入、查找和删除都明显变快。Heikki Linnakangas 确认目录这层间接对所有共享内存哈希表都多余,因为它们都不支持动态扩容,新表内存占用也小得多。他同时担心 InvalidateBuffer() 持自旋锁的时间变长,要求补上大量哈希冲突下的最坏情况基准。

PostgreSQL 18 的四项逻辑复制改进落到 RDS

Ramdas GutlapalliAWS Database 博客

AWS 的 Ramdas Gutlapalli 梳理了 PostgreSQL 18 在逻辑复制上的四项改动。新的发布参数 publish_generated_columns 让 STORED 生成列可以进入复制流;pg_stat_subscription_stats 增加七个冲突计数器,把笼统的错误数拆成按冲突类型统计;新订阅的 streaming 默认值改为 parallel;新增 idle_replication_slot_timeout,自动废弃长期闲置的复制槽。

用 CloudNativePG 分布式拓扑做跨区域容灾

Wellingtone LuvongaCybertec 博客

Cybertec 的 Wellingtone Luvonga 演示了怎么用 CloudNativePG 的分布式拓扑在多个 Kubernetes 集群之间做跨区域容灾。方案拿 MinIO 当兼容 S3 的对象存储,主集群用 barman-cloud 插件持续归档 WAL,副本集群轮询同一份对象存储完成初始化并保持同步。两点要注意:复制延迟取决于对象存储吞吐而非直连流复制,主副集群还必须跑完全相同的 PostgreSQL 与 operator 版本。

KVM 影子 MMU 逃逸漏洞公开 PoC

V4belJanuscape

Januscape 公开了一个 x86 KVM 影子 MMU 的 guest 到 host 逃逸问题,编号 CVE-2026-53359,影响范围从 2010 年 8 月的提交一直到 2026 年 6 月 16 日的修复提交。已公开的 PoC 足以让 guest 触发宿主内核 panic,作者称完整可控的逃逸利用存在但未发布。接收不可信 guest、又开了嵌套虚拟化的环境风险最高。跑 KVM 的团队应确认宿主内核是否包含提交 81ccda30b4e8,必要时先关掉嵌套虚拟化。