post_parse_analyze_hook
语义分析后处理
供插件在语法分析后的语义分析结束时接管处理的钩子。
当前查看 PostgreSQL 18。
中文定义与说明
供插件在语法分析后的语义分析结束时接管处理的钩子。
以下中文为本站依据所列 PostgreSQL 源码注释编译的说明。
接口声明
typedef void (*post_parse_analyze_hook_type) (ParseState *pstate, Query *query, JumbleState *jstate); extern PGDLLIMPORT post_parse_analyze_hook_type post_parse_analyze_hook;
调用位置
src/backend/commands/explain.c:194src/backend/commands/explain.c:427src/backend/commands/explain.c:453src/backend/parser/analyze.c:128src/backend/parser/analyze.c:170src/backend/parser/analyze.c:207
核心调用上下文:src/backend/commands/explain.c:188–202
/* Extract the query and, if enabled, jumble it */ query = castNode(Query, stmt->query); if (IsQueryIdEnabled()) jstate = JumbleQuery(query); if (post_parse_analyze_hook) (*post_parse_analyze_hook) (pstate, query, jstate); /* * Parse analysis was done already, but we still have to run the rule * rewriter. We do not do AcquireRewriteLocks: we assume the query either * came straight from the parser, or suitable locks were acquired by * plancache.c. */ rewritten = QueryRewrite(castNode(Query, stmt->query));
核心调用上下文:src/backend/commands/explain.c:421–435
}
ctas_query = castNode(Query, copyObject(ctas->query));
if (IsQueryIdEnabled())
jstate = JumbleQuery(ctas_query);
if (post_parse_analyze_hook)
(*post_parse_analyze_hook) (pstate, ctas_query, jstate);
rewritten = QueryRewrite(ctas_query);
Assert(list_length(rewritten) == 1);
ExplainOneQuery(linitial_node(Query, rewritten),
CURSOR_OPT_PARALLEL_OK, ctas->into, es,
pstate, params);
}
else if (IsA(utilityStmt, DeclareCursorStmt))
{核心调用上下文:src/backend/commands/explain.c:447–461
JumbleState *jstate = NULL; dcs_query = castNode(Query, copyObject(dcs->query)); if (IsQueryIdEnabled()) jstate = JumbleQuery(dcs_query); if (post_parse_analyze_hook) (*post_parse_analyze_hook) (pstate, dcs_query, jstate); rewritten = QueryRewrite(dcs_query); Assert(list_length(rewritten) == 1); ExplainOneQuery(linitial_node(Query, rewritten), dcs->options, NULL, es, pstate, params); } else if (IsA(utilityStmt, ExecuteStmt))
说明
供插件在语法分析后的语义分析结束时接管处理的钩子。
- 接口类型
- post_parse_analyze_hook_type
- 声明头文件
- src/include/parser/analyze.h
- 调用阶段
- 解析与命令处理
- 初始值
- NULL(未安装钩子)
接口签名
typedef void (*post_parse_analyze_hook_type) (ParseState *pstate, Query *query, JumbleState *jstate);
extern PGDLLIMPORT post_parse_analyze_hook_type post_parse_analyze_hook;版本差异
PostgreSQL 14 起的接口包含 JumbleState 参数;较早版本只传入 ParseState 和 Query。请以所选构建的接口签名为准。
调用位置
src/backend/commands/explain.c:194
src/backend/commands/explain.c:427
src/backend/commands/explain.c:453
src/backend/parser/analyze.c:128
src/backend/parser/analyze.c:170
src/backend/parser/analyze.c:207
文档与源码
查看来源构建
- 版本
- 18
- 构建
- REL_18_STABLE
- 来源指纹
753057e340da8f22e57c9a409ea7a235fd6a46bd
同类条目
ProcessUtility_hook实用命令处理
返回扩展钩子 · 此条目的收录范围为 PostgreSQL 10 至 20;起点不一定是实际引入版本。