pull/7598/merge
Emel Şimşek 2025-06-24 12:22:23 -07:00 committed by GitHub
commit 9fb1b45b98
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 58 additions and 2 deletions

View File

@ -815,8 +815,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

View File

@ -919,7 +919,11 @@ FetchRemoteExplainFromWorkers(Task *task, ExplainState *es, ParamListInfo params
if (params)
{
ExtractParametersFromParamList(params, &paramTypes, &paramValues, false);
/* force evaluation of bound params */
params = copyParamList(params);
ExtractParametersForRemoteExecution(params, &paramTypes,
&paramValues);
}
int sendStatus = SendRemoteCommandParams(connection, explainQuery->data,
@ -1890,6 +1894,7 @@ FetchPlanQueryForExplainAnalyze(const char *queryString, ParamListInfo params)
ParameterResolutionSubquery(params));
}
appendStringInfoString(fetchQuery,
"SELECT explain_analyze_output, execution_duration "
"FROM worker_last_saved_explain_analyze()");
@ -1913,6 +1918,12 @@ ParameterResolutionSubquery(ParamListInfo params)
for (int paramIndex = 0; paramIndex < params->numParams; paramIndex++)
{
ParamExternData *param = &params->params[paramIndex];
if (param->ptype == 0)
{
continue;
}
char *typeName = format_type_extended(param->ptype, -1,
FORMAT_TYPE_FORCE_QUALIFY);

View File

@ -3239,6 +3239,19 @@ SET auto_explain.log_min_duration = 0;
set auto_explain.log_analyze to true;
-- the following should not be locally executed since explain analyze is on
select * from test_ref_table;
CREATE TABLE test_auto_explain.test_params
( coll1 int8 NULL,
coll2 int4 NOT NULL);
SELECT create_distributed_table('test_auto_explain.test_params', 'coll1');
CREATE OR REPLACE PROCEDURE test_auto_explain.test_delete_from(p_coll2 int)
LANGUAGE plpgsql
AS $$
BEGIN
DELETE FROM test_auto_explain.test_params
WHERE coll2 = p_coll2;
END;$$;
CALL test_auto_explain.test_delete_from(20240401);
DROP SCHEMA test_auto_explain CASCADE;
SET client_min_messages TO ERROR;
DROP SCHEMA multi_explain CASCADE;

View File

@ -3228,6 +3228,19 @@ SET auto_explain.log_min_duration = 0;
set auto_explain.log_analyze to true;
-- the following should not be locally executed since explain analyze is on
select * from test_ref_table;
CREATE TABLE test_auto_explain.test_params
( coll1 int8 NULL,
coll2 int4 NOT NULL);
SELECT create_distributed_table('test_auto_explain.test_params', 'coll1');
CREATE OR REPLACE PROCEDURE test_auto_explain.test_delete_from(p_coll2 int)
LANGUAGE plpgsql
AS $$
BEGIN
DELETE FROM test_auto_explain.test_params
WHERE coll2 = p_coll2;
END;$$;
CALL test_auto_explain.test_delete_from(20240401);
DROP SCHEMA test_auto_explain CASCADE;
SET client_min_messages TO ERROR;
DROP SCHEMA multi_explain CASCADE;

View File

@ -1180,6 +1180,22 @@ set auto_explain.log_analyze to true;
-- the following should not be locally executed since explain analyze is on
select * from test_ref_table;
CREATE TABLE test_auto_explain.test_params
( coll1 int8 NULL,
coll2 int4 NOT NULL);
SELECT create_distributed_table('test_auto_explain.test_params', 'coll1');
CREATE OR REPLACE PROCEDURE test_auto_explain.test_delete_from(p_coll2 int)
LANGUAGE plpgsql
AS $$
BEGIN
DELETE FROM test_auto_explain.test_params
WHERE coll2 = p_coll2;
END;$$;
CALL test_auto_explain.test_delete_from(20240401);
DROP SCHEMA test_auto_explain CASCADE;
SET client_min_messages TO ERROR;