在 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;
我写了一个 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;