在 SQL 函数中的 运行 ALTER 语句时出现错误

Getting ERROR while running ALTER statement inside the SQL function

我写了一个 SQL 函数来改变 SCHEMA 所有权。我能够 运行 语句直接(没有函数)但是在 运行 在函数中使用 ALTER 语句时出错。

函数“test”创建成功:

CREATE OR REPLACE FUNCTION test.update_ownership(schemaname text) RETURNS text AS $$ 
DECLARE
        BEGIN
        ALTER SCHEMA schemaname OWNER TO postgresql;
        END;
$$ LANGUAGE plpgsql;

执行函数为:

select test.update_ownership('myschema')

我在执行函数时遇到错误,即:

错误:模式“schemaname”不存在

CONTEXT: SQL 语句“ALTER SCHEMA schemaname OWNER TO postgresql” PL/pgSQL 函数 collection.update_ownership(text) 第 4 行 SQL 语句 SQL 状态:3F000

您不能使用参数作为标识符,为此您必须使用动态 SQL。生成 SQL 最好使用 format() 函数来正确处理标识符。

CREATE OR REPLACE FUNCTION test.update_ownership(schemaname text) 
   RETURNS void 
AS $$ 
BEGIN
  execute format('ALTER SCHEMA %I OWNER TO postgresql', schemaname);
END;
$$ LANGUAGE plpgsql;