planner_hook 是 PostgreSQL 规划器的外部拦截点,允许扩展在不修改内核代码的前提下观察或改变查询规划过程。pg_stat_statements 的规划时间统计、pg_hint_plan 的提示改写都依赖此钩子。
要点:
- 自定义函数通过
planner_hook 全局指针注册,优先于 standard_planner() 执行。- 典型实现包含前处理、委托(调
standard_planner() 或链中下一钩子)、后处理三个阶段。- 多扩展通过
prev_planner_hook 保存前一个钩子形成调用链,加载顺序决定执行顺序。- 钩子在每次
SELECT/INSERT/UPDATE/DELETE/EXPLAIN 的规划阶段触发,缓存命中时不触发。原文链接
#开发者 #工具
📢 频道:@DevToolboxHub
