From 05c88392fd5b61d6d3390a6cee25607f607eb015 Mon Sep 17 00:00:00 2001 From: EmelSimsek Date: Tue, 14 May 2024 15:39:50 +0300 Subject: [PATCH] Fix --- .../distributed/executor/adaptive_executor.c | 5 ++++- src/backend/distributed/planner/multi_explain.c | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/backend/distributed/executor/adaptive_executor.c b/src/backend/distributed/executor/adaptive_executor.c index e912f418d..f24e5b30a 100644 --- a/src/backend/distributed/executor/adaptive_executor.c +++ b/src/backend/distributed/executor/adaptive_executor.c @@ -816,8 +816,11 @@ AdaptiveExecutor(CitusScanState *scanState) * be part of the same transaction. */ UseCoordinatedTransaction(); + + ParamListInfo boundParams = copyParamList(paramListInfo); + taskList = ExplainAnalyzeTaskList(taskList, defaultTupleDest, tupleDescriptor, - paramListInfo); + boundParams); /* * Multiple queries per task is not supported with local execution. See the Assert in diff --git a/src/backend/distributed/planner/multi_explain.c b/src/backend/distributed/planner/multi_explain.c index cb8029e94..6049fdcfa 100644 --- a/src/backend/distributed/planner/multi_explain.c +++ b/src/backend/distributed/planner/multi_explain.c @@ -1589,6 +1589,16 @@ FetchPlanQueryForExplainAnalyze(const char *queryString, ParamListInfo params) { StringInfo fetchQuery = makeStringInfo(); + if (params != NULL) + { + /* + * Add a dummy CTE to ensure all parameters are referenced, such that their + * types can be resolved. + */ + appendStringInfo(fetchQuery, "WITH unused AS (%s) ", + ParameterResolutionSubquery(params)); + } + appendStringInfoString(fetchQuery, "SELECT explain_analyze_output, execution_duration " @@ -1613,6 +1623,12 @@ ParameterResolutionSubquery(ParamListInfo params) for (int paramIndex = 0; paramIndex < params->numParams; paramIndex++) { ParamExternData *param = ¶ms->params[paramIndex]; + + if (param->ptype == 0) + { + continue; + } + char *typeName = format_type_extended(param->ptype, -1, FORMAT_TYPE_FORCE_QUALIFY);