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

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

PostgreSQL 博览 RSS 订阅

当天收录 34 条。

Postgres 19 支持在线开启数据校验和

Shaun ThomaspgEdge 博客

数据校验和能发现存储层悄悄损坏的页,过去只能在初始化集簇时决定开关,事后转换要用 pg_checksums 停机离线跑,中断还无法续跑。PostgreSQL 18 已把校验和设为新集簇默认,19 再提供 pg_enable_data_checksums(),由后台工作进程在线遍历数据页完成转换,并像基于代价的 VACUUM 一样限速。data_checksums 参数会显示转换进度,关闭时不重写页面,几乎瞬时完成。

执行器批处理补丁改用扫描槽内嵌批次

Amit LangotePostgreSQL hackers

PostgreSQL 执行器一次只处理一行,扫描节点的每行开销在分析型查询里格外明显。Amit Langote 发出执行器批处理补丁第 8 版,相比上一版重新设计:批次直接内嵌在扫描槽里,新增两个 TableAM 回调,去掉 RowBatch 容器、executor_batch_rows 参数和 EXPLAIN BATCHES 输出,批次固定为堆表一页的可见元组。本轮只改造顺序扫描,count(*) 在全可见页上快 20–21%。

REPACK CONCURRENTLY 生成列报错已修复

Álvaro HerreraPostgreSQL hackers

REPACK CONCURRENTLY 在含生成列的表上会失败,并发出现非 HOT UPDATE 时报出找不到列的生成表达式。Álvaro Herrera 已提交修复,把 catalog 行的复制限制在并发模式下。同一轮还改了 updatedCols 的构建,忽略已删除的列:它们不可能是索引键列,标记为已更新在语义上就是错的。Ewan Young 用注入点测试验证了两处修复,后一处只轻微影响 btree 索引提示。

effective_io_concurrency 调高会耗尽本地缓冲区

Induja SreekanthanPostgreSQL hackers

把 effective_io_concurrency 设到 64 或更高之后,对带 TOAST 数据的临时表做顺序扫描,ReadStream 的预读会把全部本地缓冲区 pin 住,TOAST 索引查找随即报出没有空闲本地缓冲区。Induja Sreekanthan 给出复现步骤和补丁,把 max_pinned_buffers 限制为本地缓冲区的 75%。根因与另一个已知缺陷相同,PostgreSQL 19 已把预读预算削到四分之一,是否回合 18 待定。

enable_nestloop 该临时关掉而不是长期关掉

Christophe Pettusthebuild.com

嵌套循环是唯一能配合任意连接条件的方式,不等值连接和交叉连接都只能靠它,所以 enable_nestloop 默认打开。Christophe Pettus 在 GUC 逐项解读系列里写道,它出问题的典型形态是规划器以为外侧只返回五行,实际来了几十万行,本来便宜的索引查找被执行几十万次,查询从几毫秒拖成几分钟。临时关掉可以确认病灶,但病根是基数估算偏差,该去 ANALYZE、调统计目标或建扩展统计。

DBOS 主张把工作流状态放进同一个 Postgres

DBOSDBOS 博客

工作流引擎通常自带存储,与业务数据分处两地,一致性只能靠补偿逻辑维持。DBOS 的这篇文章主张把 workflow 状态与应用数据放进同一个 Postgres,用一次数据库事务解决其中一部分分布式系统复杂性,durable execution 和 agent 工作流因此重新向数据库靠拢。文章原发于 6 月 15 日,7 月初重新热起来。真这么用,先撞上的通常是运维边界:队列表膨胀、VACUUM 压力和长事务持锁。