diff options
Diffstat (limited to 'src/backend/commands/explain.c')
-rw-r--r-- | src/backend/commands/explain.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index ab3898ff1eb..22616cf7add 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -52,6 +52,9 @@ ExplainOneQuery_hook_type ExplainOneQuery_hook = NULL; /* Hook for plugins to get control in explain_get_index_name() */ explain_get_index_name_hook_type explain_get_index_name_hook = NULL; +/* per-plan and per-node hooks for plugins to print additional info */ +explain_per_plan_hook_type explain_per_plan_hook = NULL; +explain_per_node_hook_type explain_per_node_hook = NULL; /* * Various places within need to convert bytes to kilobytes. Round these up @@ -654,6 +657,11 @@ ExplainOnePlan(PlannedStmt *plannedstmt, CachedPlan *cplan, if (es->serialize != EXPLAIN_SERIALIZE_NONE) ExplainPrintSerialize(es, &serializeMetrics); + /* Allow plugins to print additional information */ + if (explain_per_plan_hook) + (*explain_per_plan_hook) (plannedstmt, into, es, queryString, + params, queryEnv); + /* * Close down the query and free resources. Include time for this in the * total execution time (although it should be pretty minimal). @@ -2318,6 +2326,11 @@ ExplainNode(PlanState *planstate, List *ancestors, ExplainFlushWorkersState(es); es->workers_state = save_workers_state; + /* Allow plugins to print additional information */ + if (explain_per_node_hook) + (*explain_per_node_hook) (planstate, ancestors, relationship, + plan_name, es); + /* * If partition pruning was done during executor initialization, the * number of child plans we'll display below will be less than the number |