From 43c3c5eded728d1cdc97362bff7435eb158f1dbc Mon Sep 17 00:00:00 2001 From: Onder Kalaci Date: Tue, 22 Mar 2022 16:50:24 +0100 Subject: [PATCH] wip --- src/backend/distributed/commands/function.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/backend/distributed/commands/function.c b/src/backend/distributed/commands/function.c index 83524625f..849730894 100644 --- a/src/backend/distributed/commands/function.c +++ b/src/backend/distributed/commands/function.c @@ -894,11 +894,25 @@ GetFunctionAlterOwnerCommand(const RegProcedure funcOid) * If the function exists we want to use format_procedure_qualified to * serialize its canonical arguments */ - char *functionSignature = format_procedure_qualified(funcOid); + char *schemaName = get_namespace_name(get_func_namespace(funcOid)); + char *functionName = get_func_name(funcOid); + char *qualifiedName = quote_qualified_identifier(schemaName, functionName); + char *functionOwner = GetUserNameFromId(procOwner, false); - appendStringInfo(alterCommand, "ALTER ROUTINE %s OWNER TO %s;", - functionSignature, + Datum sqlTextDatum = (Datum) 0; + + PushOverrideEmptySearchPath(CurrentMemoryContext); + + sqlTextDatum = DirectFunctionCall1(pg_get_function_arguments, + ObjectIdGetDatum(funcOid)); + char *functionParams = TextDatumGetCString(sqlTextDatum); + + /* revert back to original search_path */ + PopOverrideSearchPath(); + + appendStringInfo(alterCommand, "ALTER ROUTINE %s(%s) OWNER TO %s;", + qualifiedName, functionParams, quote_identifier(functionOwner)); return alterCommand->data;