PostgreSQL 拒绝查询提示 20 年——Postgres 19 终于内置
来源:dev.to — 2026-07-24
📋 概述
PostgreSQL 19 引入了 pg_plan_advice 扩展模块,这是该项目历史上首个内核级的查询计划稳定化机制。文章回顾了社区 20 年来拒绝查询提示的理由(提示会腐烂、阻碍升级、掩盖真实问题),并解释了 pg_plan_advice 的不同设计理念:它不是嵌入 SQL 的注释提示,而是从外部描述、捕获和执行计划决策。
🔑 核心要点
- PostgreSQL 19 引入 pg_plan_advice——首个内核级查询计划稳定化机制
- 20 年拒绝的原因:Oracle 式 SQL 注释中的提示会腐烂、阻碍升级、掩盖真实问题
- pg_plan_advice 的设计不同:从外部描述和捕获计划决策,而非嵌入 SQL 文本
- 解决的核心问题:ANALYZE 抽样统计误差导致规划器选择错误计划(如 Clerk 的 99.9996% NULL 列案例)
- 该模块支持描述、捕获、执行三种模式:分析当前计划、记录已知好计划、强制使用特定计划
- pg_plan_advice 不会腐烂:升级时自动失效,提示与查询解耦便于代码审查
💡 金句
PostgreSQL 在查询提示上说了 20 年的「不」。Postgres 19 终于内置了它们。
👍 0
👎 0
← 返回 Dev.to 首页