Attempt to fix parameter passing with auto_explain

FixIssue-7596
EmelSimsek 2024-05-13 15:19:25 +03:00
parent 553d5ba15d
commit c4b6fb1dd0
No known key found for this signature in database
GPG Key ID: EB13DFB77C32D7D8
2 changed files with 21 additions and 10 deletions

View File

@ -808,7 +808,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,
@ -1585,15 +1589,6 @@ 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 "

View File

@ -1168,6 +1168,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;