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

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

PostgreSQL 博览 RSS 订阅

当天收录 32 条。

PG19 的 GRAPH_TABLE 只是改写器,定长遍历零开销

Alexander Ioffeexobench.ai

Alexander Ioffe 实测 PostgreSQL 19 的 SQL/PGQ:GRAPH_TABLE 不是图存储引擎,而是把属性图元数据改写成关系连接。跳数固定的模式与手写连接编译出一样的计划,四跳类型链在 60 万到 240 万行上都在 0.29 毫秒内完成。变长量词则被 beta 直接拒绝,可达性查询只能退回递归 CTE,用时 59 至 2189 毫秒,Apache AGE 还要慢 1.4 至 2.1 倍。

超过 16 个索引的热表会把整个系统拖进锁管理器

Christophe Pettusthebuild.com

Christophe Pettus 解释 max_locks_per_transaction 与快速路径的关系:17 及更早版本的快速路径固定 16 槽,一条查询要拿的关系锁超过这个数就会溢出到共享锁表,几百个后端同时撞上 LWLock:LockManager 等待。18 起快速路径按参数以 16 为单位分组,默认 64。出路有三条:用预备语句只锁真正用到的索引、升到 18、删掉热表上零使用的索引。

在线调整 shared_buffers 的补丁补上压力测试

Ashutosh BapatPostgreSQL hackers

Ashutosh Bapat 为免重启调整缓冲池大小的补丁系列加了成套压力测试,覆盖调整与 CHECKPOINT、pg_prewarm、pg_buffercache 之间的同步。测试暴露出多个缺陷:BufferSync() 需要修正、缓冲区扫描循环里的 CFI 调用位置要挪、pg_prewarm 误以为 NBuffers 恒定。Palak Chaturvedi 的增量修复改成逐个缓冲区处理,非 NUMA 路径快约 25%。

逻辑复制行过滤会静默丢弃未变更的 TOAST 列

Zhijie HouPostgreSQL hackers

行过滤器可能把 UPDATE 转成 INSERT,于是不属于 replica identity 的未修改 toasted 列值被静默丢掉。社区在 DDL、UPDATE、解码和应用四个时机之间权衡修法,目前倾向:回归分支采用应用端报错,可用 ALTER SUBSCRIPTION SKIP 恢复,master 再加一层按行的检查。Matthias van de Meent 反对把逻辑复制的限制转嫁给普通 DML 用户。

WAL 压缩补丁漏掉 PageSetLSN,崩溃后会丢提示位

Surya PoondlaPostgreSQL hackers

Surya Poondla 审查 WAL 记录压缩补丁时发现违反 WAL-before-data 规则的问题:补丁为纯提示位变更写紧凑记录时没有更新页面 LSN,而 FlushBuffer() 完全靠页面 LSN 保证顺序,跳过 PageSetLSN() 会让 XLogFlush() 变成空操作,页面可能先于对应的 WAL 记录落盘。一旦崩溃,页面上已有的提示位无法通过 WAL 恢复。

覆盖索引的写入代价:插入慢 28%,体积大六倍

Alexander Ioffeexobench.ai

Alexander Ioffe 在 200 万行订单表上比较了无二级索引、单列索引和带 INCLUDE 的覆盖索引。覆盖索引会让被包含列的更新失去 HOT 优化,插入比单列索引慢 28%、比无索引慢 88%,更新分别慢约 25% 和 30%,占用 112 MB 而单列索引只要 18 MB,换来的是读取快 1.26 倍。他的结论是:只有当每个分析查询对应的写入低于每分钟约 4300 次时,覆盖索引才划算。

JIT 的三个代价阈值不该调,该按库关掉

Christophe Pettusthebuild.com

jit_above_cost 默认 100000 触发编译,jit_inline_above_cost 与 jit_optimize_above_cost 默认 500000,分别再加内联和 LLVM 优化。Christophe Pettus 指出根本矛盾:计划代价衡量的是取页数和行数,JIT 的收益却取决于表达式执行多少次、有多复杂,分区扫描加 sum(id) 会白白编译。他建议 OLTP 库直接关掉 JIT。

用 CloudNativePG 给 OpenBao 当存储后端

Gabriele Bartolini个人博客

Gabriele Bartolini 演示把 Linux 基金会的 Vault 分支 OpenBao 部署在 Kubernetes 上,用三副本 CNPG 集群作 postgresql 存储驱动的后端:客户端证书由 DatabaseRole 签发,配合 pg_hba.conf 实现免密码双向 TLS,openbao-rw 角色只对两张表有读写权限。要注意 OpenBao 只在启动时打开连接池,证书 90 天轮换后必须滚动重启 Pod。

powa-archivist 5.3.0 发布,修复 PG19 兼容性

PoWA 团队PostgreSQL 新闻

PoWA 团队发布核心扩展 powa-archivist 5.3.0。PoWA 是 PostgreSQL 负载分析工具,通过一组覆盖各子系统的扩展从多个实例采集并聚合指标,提供实时图表,还能给出全局或按查询的索引建议。这一版只有一处改动:适配 pg19beta2 中 pg_stat_lock.wait_time 的数据类型变更,修复由 Julien Rouhaud 提交。已在跟 19 beta 做兼容性验证的用户需要同步升级。