由 John Doe 十月 23, 2026
2026 年 10 月,Postgres 社区周报 第 1 期,本周新闻速递。
目录

用 PostgreSQL 搞定一切
- 作者自 2003 年起使用 PostgreSQL,认为其核心优势是:稳定可靠、易安装运维和扩展、能大幅简化 IT 架构。
- PostgreSQL 历史悠久、社区活跃,持续加入 JSON、分区、CTE 等现代功能,同时保持兼容与稳定。
- 可替代独立全文搜索系统(如 Solr/Elastic):内置
tsvector/tsquery,必要时可用pg_textsearch、ParadeDB/pg_search 等扩展实现 BM25 和高级搜索。 - 可替代 MongoDB:JSON/JSONB 加 GIN 索引,支持高效存储与查询。
- 可替代 Kafka/RabbitMQ 等队列系统:利用
SELECT ... FOR UPDATE、SKIP LOCKED将表用作队列。 - 可替代 ClickHouse 处理高吞吐时间序列数据:通过 TimescaleDB 扩展。
- 可作为 AI 向量数据库:
pgvector、pgai支持向量检索和 LLM 工作流。 - 可替代 Redis 做缓存:使用 UNLOGGED 表,并可用触发器模拟过期。
- 还可用于存储原始二进制数据、用 LTREE 管理层级数据、用 Apache AGE 做图数据库,甚至通过 SQL 直接返回 JSON 替代部分微服务。
- 核心建议:优先问“PostgreSQL 能不能做?”,先用 PostgreSQL 起步,只有真正遇到性能或功能瓶颈时再引入专用系统。
PostgreSQL 19:有哪些变化、哪些重要、现在该测试什么
- 发布节奏与定位:PostgreSQL 19 已进入候选版本阶段,计划 RC2 于 11 月 12 日、正式版于 11 月 19 日发布;在正式 GA 前,生产环境仍应以 PostgreSQL 18 为目标,19 应先在非生产环境测试。
- 可靠性优先:多个重要功能因开发/审查不足被回退,包括 SQL 属性图查询、分区合并/拆分、运行时启停数据校验和、
GROUP BY ALL、UPDATE/DELETE ... FOR PORTION OF等,体现社区“可靠性优先、发布节奏可预测”的原则。 - 审查压力上升:AI 辅助审查更快发现边缘案例和安全问题,但关键是项目是否有足够能力调查、修复和审查这些问题。
- REPACK / REPACK CONCURRENTLY:可重写表以回收空间、按索引重组行,并发模式下大部分过程可继续读写;但最终切换仍需
ACCESS EXCLUSIVE锁,需要临时磁盘空间,并需注意旧快照的可见性行为。应结合实际写入和长事务测试。 - 查询计划建议:
pg_plan_advice和pg_stash_advice可描述、复现并约束连接顺序、扫描方式等计划选择,用于应对计划回归;但它不是通用性能开关,过度约束可能妨碍优化器随数据变化选择更优计划。 - Autovacuum 改进:支持索引清理等阶段使用并行 worker,并引入评分机制和
pg_stat_autovacuum_scores视图来优先处理更需要的维护任务;这是有目标的并行,不是所有阶段全并行。测试应关注维护是否跟得上、对应用延迟和资源的影响。 - 逻辑复制序列同步:可将 publisher 的序列值同步到 subscriber,支持初始同步和
ALTER SUBSCRIPTION ... REFRESH SEQUENCES;但 publisher 必须是 PostgreSQL 19+,且不是持续同步,序列值仍可能再次不一致,需演练切换流程。 - 其他值得关注功能:
ON CONFLICT DO SELECT让 upsert 返回已存在行;窗口函数支持IGNORE NULLS。 - 兼容性与默认值:PostgreSQL 19 默认禁用 JIT 编译,依赖 JIT 的分析型负载应显式评估该设置。
- 测试建议:搭建反映真实部署的非生产环境,覆盖查询、扩展、驱动、数据分布、维护流程,并包含升级与恢复演练;RC 仍是测试版本,不是生产推荐,应积极反馈回归问题。
PostgreSQL 19 因 AI 代码审查发现更多缺陷而延期
- PostgreSQL 19 发布时间从原定 9 月底/10 月初推迟到约 11 月 19 日,另有 8 至 10 项重要功能被撤回或推迟到 PostgreSQL 20。
- 延期部分原因是 LLM 辅助代码审查更快发现了大量边缘案例缺陷;虽然单个修复可能很小,但逐项处理有固定开销,最终导致时间不足。
- 一些被撤回功能存在重大架构缺陷,难以在 beta 阶段“快速修复”;AI 审查也提高了功能写完后才被审视的质量门槛。
- 开发者强调,这不是“vibe coding”导致的,因为多数新功能编写时该方式尚不可用。
- 被移除的功能包括 SQL/PGQ 支持;贡献者 Tom Lane 曾警告,若在 v19 发布,可能出现直到 v20 才能修复的发布后缺陷。
- 尽管延期,PostgreSQL 19 仍被承诺为“很棒的版本”,包含可避免 VACUUM FULL 表锁的 REPACK CONCURRENTLY,并会因额外审查而更稳健。
- 被撤回功能可能进入 PostgreSQL 20;PG20 原预计只修 bug,现在可能承载这些新功能。
Postgres 并不慢,慢的是你的存储
- 核心观点:Postgres 扩展性问题常被误判为数据库慢,实际可能是存储达到带宽、IOPS 或队列上限,导致查询、WAL、checkpoint、VACUUM、逻辑复制互相争抢资源。
- 五类典型症状:更新/写入变慢、P95 读延迟不稳定、autovacuum 落后与表膨胀、checkpoint 变慢并干扰业务、逻辑复制积压。
- 基准测试:同一 3.3B 行、482 GiB 的 pgbench 随机 UPDATE 负载,64 客户端;对比 gp3 EBS 3000 IOPS 与本地 NVMe。NVMe 中位 16,030 TPS,EBS 1,734 TPS,约 9.24 倍;事务延迟 4.0 ms vs 36.9 ms。
- 维护操作对比:清理 10 GB 膨胀,VACUUM 为 366 秒 vs 964 秒;清空 10 GB 逻辑复制积压为 139 秒 vs 238 秒。
- 差距来源:EBS 主要耗在等存储:页读取约 19 ms vs 0.3 ms,WAL fsync 约 11 ms vs 1.5 ms;CPU 工作相近,约 2 ms。EBS 更多会话等待 I/O,CPU 更多时间处于等待状态。
- 持久性方案:本地 NVMe 单机数据随节点丢失,因此持久性需放在集群层:双 standby + quorum 同步复制(如
ANY 1,跨 AZ),并用 WAL-G 等做基础备份与连续 WAL 归档到对象存储。 - 生产架构:NVMe 提供性能,复制提供可用性,独立备份 + 归档 WAL 提供恢复能力;备份应放在独立故障域,必要时做区域副本,目标 RPO 可达秒级并支持 PITR。
- 结论:Postgres 疑似停止扩展时,应同时诊断数据库与存储;本地 NVMe 能显著降低存储受限负载的 I/O 惩罚,但需要不同的运维模型和高可用/备份恢复架构。
训练 4B 模型生成比 Postgres 快 81% 的查询计划
- 核心目标:用小型开源4B模型通过监督微调(SFT)和智能体强化学习(RL)生成
pg_hint_plan提示,引导Postgres选择更优查询计划;重点不是替代优化器,而是优化反复执行的分析型查询。 - 初始模型表现很差:在113条JOB查询中,有99条无法生成查询计划,且不熟悉工具调用和智能体框架。
- 方法上构建了
qo-agent工具链,包括查看表结构、列统计、获取计划、评估候选、保留默认计划、结束搜索;用CEB训练、JOB验证,并做查询拓扑去重以避免模板泄漏。 - 测量降噪是关键:使用4个Postgres容器、2GB
shared_buffers、4MBwork_mem、预热和交错测量候选/默认计划;自定义“fooling rate”评估噪声,使no-op误差约降4倍,p90查询几乎不再被噪声误导。 - 先用约500条GPT-6 Astra智能体轨迹做离线蒸馏/SFT,让4B模型学会工具调用和计划表达;2个epoch有提升,3个epoch反而退化,说明验证loss平稳不代表没有学到有用行为。
- RL阶段设计了裁剪、软阈值、默认计划惩罚等奖励机制,并用自定义“anchored GRPO”处理噪声环境和相对优势;训练/推理在2×H100上,Postgres测量在本机,通过Tailscale连接。
- 最终结果:在JOB上采用最佳-of-15(每查询3次rollout)达到1.81倍几何平均加速和1.81倍总工作负载加速;113条join-heavy查询总延迟降低44.7%。
- 成本约1200美元:约800美元用于租用2×H100约95小时,约400美元用于OpenAI API生成教师轨迹;代码开源。
- 结论:小模型结合领域RL环境可在特定数据库和重复查询场景中显著优于Postgres默认计划;前沿大模型仍是强教师;企业可用自有数据低成本训练小模型。下一步包括Bao式hint sweeping、on-policy distillation、trace inversion和EC2噪声测量。
让 Postgres 分析性能提升 300 倍:批处理、算子融合与 SIMD
- pgrust 0.2 主打性能:比上一版快 10 倍;OLTP 基准比 Postgres 快 30%;在 ClickBench 分析型基准上比 Postgres 快 300 倍,甚至领先 ClickHouse。
- 查询引擎优化是 300 倍提升中的关键,单独贡献约 10 倍;核心目标是减少 CPU 和内存带宽开销。
- Postgres 诞生于磁盘 I/O 为主要瓶颈的时代;如今数据常驻内存、NVMe 更快、分析负载更偏向批量扫描,CPU/内存效率变得更重要。
- 示例中 Postgres 对 5 亿个浮点数求和约需 20 秒,而等效 Rust 循环约 358ms,说明查询引擎层有巨大优化空间。
- Postgres 的 Volcano 模型逐行调用
next(),开销大;改为批处理后可显著减少函数调用和流水线损失。 - 算子融合把常见相邻操作合并成单一节点,避免中间拷贝;SIMD 进一步并行处理多行数据。
- 微型查询引擎优化效果:Volcano 模型 1.3s → 批处理 480ms → 算子融合 358ms → SIMD 135ms,累计约 9.6 倍提升。
- 算子融合适合硬编码常见模式,通用化需要 JIT;SIMD 对浮点求和需注意结果顺序和精度差异。
Postgres 的 recovery_prefetch 被认为有害并会导致服务中断
- 核心结论:
recovery_prefetch在开启 FPW/FPI 且使用同步复制的生产环境中,可能把副本拖慢到数小时,并进一步导致主库写入挂起甚至业务中断。 - 早期隐患未被重视:2021 年已有人提出“对已预取或已由 WAL FPI 加载的块继续预取”可能有问题,但当时被认为影响不大;2025 年现场报告显示备用库出现数小时回放延迟,禁用
recovery_prefetch后恢复。 - 问题机制一:FPI 场景下做无用预取:预取代码未充分考虑共享缓冲区可能已从 WAL FPI 加载,却仍发出
fadvise,造成不必要的 I/O。 - 问题机制二:IOPS 放大:主库的大顺序 I/O 在副本上可能被
recovery_prefetch转成 8KB 随机读,相同读取字节数下 IOPS 可放大至 16 倍,容易打满副本磁盘 IOPS。 - 与同步复制叠加会放大为宕机风险:同步复制要求至少一个健康备库,否则主库不能接受写入;当备库因 I/O 放大严重落后,且流复制连接中断时,备库会进入 WAL 恢复状态,直到追平才恢复流式复制。
- 可稳定复现:在小规格云盘、约 10GB pgbench 数据、更新 5% 表数据后杀掉 walreceiver,可观察到 TPS 归零、写入挂起 30 分钟以上;表更大时可挂起数小时。
- 关闭 recovery_prefetch 的效果:保持 FPW 开启但禁用
recovery_prefetch后,不再出现长时间停顿和读 IOPS 爆发,备库基本能跟上,5% 更新可在 10 分钟内完成。 - 建议:作者倾向全面禁用
recovery_prefetch,认为在 FPW 默认开启时其收益可疑;同时建议考虑“两个备库 + quorum commit(ANY 1)”以提高同步复制架构的健壮性。