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

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

PostgreSQL 博览 RSS 订阅

当天收录 21 条。

GIN VACUUM 可能把内部页当叶子页,造成索引损坏

Peter GeogheganPostgreSQL hackers

Peter Geoghegan 报告了一个影响所有稳定分支的 GIN 索引损坏:ginVacuumPostingTreeLeaves() 把共享锁升级为排他锁后没有重新检查页面是否仍是叶子页,VACUUM 可能把内部页当叶子页处理,漏掉该清除的死 TID。Andrey Borodin 确认这是真实的数据损坏,追溯到 fd83c83d0。另一个缺陷是 ginInsertCleanup 只在 ginbulkdelete 的第一遍被调用。

并发分离分区未完成会引发崩溃,补丁将回移

Mihail NikalayeuPostgreSQL hackers

DETACH PARTITION ... CONCURRENTLY 的等待阶段一旦被中断,分区的 in-detach 标记只有 FINALIZE 能清除,于是 relispartition 仍为真,而 get_partition_ancestors() 返回空列表。Mihail Nikalayeu 压测时发现三处代码都假设祖先列表非空,会触发断言失败或空指针解引用。Álvaro Herrera 计划下周推入并回移。

实测 AlloyDB:协议之下是另一个数据库

Radim Marekboringsql.com

Radim Marek 实测后认为 AlloyDB 的兼容只到线协议这一层:日志即数据库,数据页由 WAL 异步派生;所谓自适应 autovacuum 只换了调度器,清理仍在计算节点上做。列存引擎把 TPC-H Q6 从 2681 毫秒降到 69 毫秒,但 SF100 下写争用从 16% 升到 29%,列存还可能因缺少查询历史而静默为空。扩展支持也割裂:plv8 只在 Omni,PostGIS 只在托管版。

jit 写在配置里只是意图,未必真的在编译

Christophe Pettusthebuild.com

jit 默认开启,代价超过阈值时用 LLVM 把表达式求值和元组解构编译成机器码,长时间的分析型查询受益,短查询只白付编译开销。真正的坑是 llvmjit 常被单独打包,容器镜像用 --no-install-recommends 时装不上,此时 PostgreSQL 静默地不做 JIT,既不报错也不写日志。Christophe Pettus 建议每台机器都跑一次 pg_jit_available() 确认。

执行器批处理设计倾向复用 slot 而非新增回调

Denis SmirnovPostgreSQL hackers

Denis Smirnov 主张不新增 table AM 回调,把 tts_batch 同时用于堆表和列存:堆表保留 Datum 数组,列存保留 Arrow 数组或压缩列,只有普通节点索要行数据时才转换。新增 TupleBatchRequest 描述属性集,TupleTableSlotBatch 带 selection 位图;支持批处理的节点在 ExecProcNode() 返回后检查 tts_batch 决定走哪条路径。

逻辑复制单表重同步补丁修掉继承表数据丢失

Cagri BirogluPostgreSQL hackers

Cagri Biroglu 的按表重新同步补丁更新到 v4,为逻辑复制提供 ALTER SUBSCRIPTION ... REFRESH TABLE。这一版把 ExecuteTruncate() 换成基于已解析 OID 的 ExecuteTruncateGuts(),修掉继承子表被静默 TRUNCATE 导致数据丢失的缺陷,并拒绝对被其他订阅追踪的关系执行 truncate。文档和 psql 补全一并补上。