sql - 在 SQL 函数中运行 ALTER 语句时出现错误
问题描述
我写了一个 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;
执行函数如下:
选择 test.update_ownership('myschema')
执行函数时出现错误,即:
错误:模式“schemaname”不存在
上下文: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;
推荐阅读
- javascript - React js从路径中删除点更新多边形
- elasticsearch - 从 CosmosDB 到 Elasticsearch 的 Logtsash 插件
- javascript - Node.js 应用程序中基于角色的登录
- bash - 在进程替换中打印换行符
- mingw-w64 - 安装 mingw-w64-v7:配置错误
- powerbi - 1 月上个月(12 月)的输出值
- java - 防止重复事件句柄的好方法
- phalcon - PhalconRest\Http\Response::setJsonContent 声明致命错误
- sonarqube - gitlabci 与声纳集成
- python - 如何阅读heroku日志?