create_upper_paths_hook
上层查询路径
供插件在 grouping_planner() 规划上层关系时接管处理的钩子。
当前查看 PostgreSQL 18。
中文定义与说明
供插件在 grouping_planner() 规划上层关系时接管处理的钩子。
以下中文为本站依据所列 PostgreSQL 源码注释编译的说明。
接口声明
typedef void (*create_upper_paths_hook_type) (PlannerInfo *root, UpperRelationKind stage, RelOptInfo *input_rel, RelOptInfo *output_rel, void *extra); extern PGDLLIMPORT create_upper_paths_hook_type create_upper_paths_hook;
源码说明
允许扩展添加更多路径。
允许扩展添加更多部分路径。
调用位置
src/backend/optimizer/plan/planner.c:2386src/backend/optimizer/plan/planner.c:4379src/backend/optimizer/plan/planner.c:4819src/backend/optimizer/plan/planner.c:5062src/backend/optimizer/plan/planner.c:5237src/backend/optimizer/plan/planner.c:5707
核心调用上下文:src/backend/optimizer/plan/planner.c:2380–2394
final_rel->fdwroutine->GetForeignUpperPaths(root, UPPERREL_FINAL, current_rel, final_rel, &extra); /* Let extensions possibly add some more paths */ if (create_upper_paths_hook) (*create_upper_paths_hook) (root, UPPERREL_FINAL, current_rel, final_rel, &extra); /* Note: currently, we leave it to callers to do set_cheapest() */ } /* * Do preprocessing for groupingSets clause and related data. *
核心调用上下文:src/backend/optimizer/plan/planner.c:4373–4387
grouped_rel->fdwroutine->GetForeignUpperPaths(root, UPPERREL_GROUP_AGG, input_rel, grouped_rel, extra); /* Let extensions possibly add some more paths */ if (create_upper_paths_hook) (*create_upper_paths_hook) (root, UPPERREL_GROUP_AGG, input_rel, grouped_rel, extra); } /* * For a given input path, consider the possible ways of doing grouping sets on * it, by combinations of hashing and sorting. This can be called multiple * times, so it's important that it not scribble on input. No result is
核心调用上下文:src/backend/optimizer/plan/planner.c:4813–4827
window_rel->fdwroutine->GetForeignUpperPaths(root, UPPERREL_WINDOW, input_rel, window_rel, NULL); /* Let extensions possibly add some more paths */ if (create_upper_paths_hook) (*create_upper_paths_hook) (root, UPPERREL_WINDOW, input_rel, window_rel, NULL); /* Now choose the best path(s) */ set_cheapest(window_rel); return window_rel; }
说明
供插件在 grouping_planner() 规划上层关系时接管处理的钩子。
- 接口类型
- create_upper_paths_hook_type
- 声明头文件
- src/include/optimizer/planner.h
- 调用阶段
- 查询规划
- 初始值
- NULL(未安装钩子)
接口签名
typedef void (*create_upper_paths_hook_type) (PlannerInfo *root, UpperRelationKind stage, RelOptInfo *input_rel, RelOptInfo *output_rel, void *extra);
extern PGDLLIMPORT create_upper_paths_hook_type create_upper_paths_hook;调用位置
src/backend/optimizer/plan/planner.c:2386
src/backend/optimizer/plan/planner.c:4379
src/backend/optimizer/plan/planner.c:4819
src/backend/optimizer/plan/planner.c:5062
src/backend/optimizer/plan/planner.c:5237
src/backend/optimizer/plan/planner.c:5707
相关条目
文档与源码
查看来源构建
- 版本
- 18
- 构建
- REL_18_STABLE
- 来源指纹
753057e340da8f22e57c9a409ea7a235fd6a46bd
同类条目
get_relation_info_hook关系规划信息join_search_hook连接顺序搜索planner_hook查询规划入口set_join_pathlist_hook连接访问路径set_rel_pathlist_hook关系访问路径
返回扩展钩子 · 此条目的收录范围为 PostgreSQL 10 至 20;起点不一定是实际引入版本。