aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/explain.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/commands/explain.c')
-rw-r--r--src/backend/commands/explain.c13
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