逐字节拆开 PostgreSQL 的 MVCC
Radim Marek 用 pageinspect 把 MVCC 拆到字节。元组头里两个 32 位事务号,t_xmin 记插入者、t_xmax 记删除或更新者,为 0 表示仍然活跃;t_infomask 用 HEAP_XMIN_COMMITTED 之类的位缓存提交状态。要点是 UPDATE 只追加新版本,旧版本等 VACUUM 回收;SELECT 首次碰到新数据会设提示位,把页标脏引出 IO。
pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
当天收录 13 条。
Radim Marek 用 pageinspect 把 MVCC 拆到字节。元组头里两个 32 位事务号,t_xmin 记插入者、t_xmax 记删除或更新者,为 0 表示仍然活跃;t_infomask 用 HEAP_XMIN_COMMITTED 之类的位缓存提交状态。要点是 UPDATE 只追加新版本,旧版本等 VACUUM 回收;SELECT 首次碰到新数据会设提示位,把页标脏引出 IO。
pgEdge 的 Shaun Thomas 讲分区表上的老问题:唯一约束和主键必须包含全部分区键列,因为每个分区各有索引,没有全局索引来判断某个值是否已存在于别的分区。他给了四种绕法:BEFORE INSERT 触发器扫全部分区,开销随分区数线性上升,200 万行从 7 秒涨到 25 秒;改为维护一张不分区的去重表,开销恒定约 2 倍,200 万行 14 秒;对去重表本身做哈希分区;或用 hashtextextended() 算去重键。
Neon 在 OpenAI Codex 市场上架了官方插件,用 MCP 把 Codex 与自家的 PostgreSQL 托管服务连起来。装上之后可以在 Codex 的对话里直接开库、建实例、改配置和查看资源,不用在 IDE 与控制台之间来回切。对已经把 AI 助手放进开发流程的团队,这意味着数据库操作也能用自然语言完成。
Tiger Data 的 Doug Pagnutti 讲 Ignition 的 SQL Historian 怎么接 TimescaleDB。Ignition 把标签历史写进 PostgreSQL,而行式存储是为事务设计的,面对窄表、只追加的时序数据并不合适。TimescaleDB 按时间自动切块,旧块转列式压缩,新块保持行式以维持写入速度。接法是关掉 Ignition 内置分区,把历史表转成超表,再加压缩与保留策略。
restore_tuple() 重建 varlena 头时丢掉压缩标志,压缩数据被当成未压缩读出乱码,补丁已验证。
Dilip Kumar 的补丁把复制冲突记进专用表,Nisha Moond 因无法干净应用要求重做基线。
Andres Freund 建议 GetLocalPinLimit() 返回 num_temp_buffers/4,代价是临时表预读距离变短。
6 月 25 至 26 日在瑞士 Rapperswil,第 9 届,英语与德语双轨,完整议程 4 月底公布。
5 月 5 日在比利时 Haasrode 举行,距布鲁塞尔约 25 公里,讲者名单与日程已上线。