Sql 使用参数以编程方式创建角色

Sql 使用参数以编程方式创建角色,sql,postgresql,plpgsql,Sql,Postgresql,Plpgsql,我正在寻找一种方法来创建一个函数,该函数接受用户名和密码的两个参数,并使用它创建一个只读角色。我试过这样的方法: create or replace function create_user_readonly ( unm varchar, pwd varchar ) returns varchar(10) as $$ begin create role unm login password @pwd; return 'success'; end; $$ languag

我正在寻找一种方法来创建一个函数,该函数接受用户名和密码的两个参数,并使用它创建一个只读角色。我试过这样的方法:

create or replace function create_user_readonly (
  unm varchar,
  pwd varchar
)
  returns varchar(10) as $$

begin

  create role unm login password @pwd;
  return 'success';

end;

$$ language plpgsql;
这将抛出错误:

[42601]错误:在“@”位置或附近出现语法错误:151

我曾想过使用动态SQL来构造查询,但在这里遇到了这个问题():

对参数符号的另一个限制是它们仅在 选择、插入、更新和删除命令。在其他语句类型中 (通常称为实用程序语句),必须以文本方式插入值 即使它们只是数据值

以下是一个例子:

create or replace function create_user_readonly (
  unm varchar,
  pwd varchar
)
  returns varchar(10) as $$

begin

  execute format($f$create role %I login password '%s'$f$,unm,pwd);
  execute format('alter role %I set transaction_read_only to on',unm);
  return 'success';

end;

$$ language plpgsql;
请记住,您将需要更改用户以将
事务设置为只读
也设置为只读。 同时

创建角色
RO默认为角色

改变角色

请记住,克服uset配置
事务\u只读
就像运行一条语句一样简单

创建角色不会授予
连接
权限,如果需要,请使用
创建用户

以下是一个示例:

create or replace function create_user_readonly (
  unm varchar,
  pwd varchar
)
  returns varchar(10) as $$

begin

  execute format($f$create role %I login password '%s'$f$,unm,pwd);
  execute format('alter role %I set transaction_read_only to on',unm);
  return 'success';

end;

$$ language plpgsql;
请记住,您将需要更改用户以将
事务设置为只读
也设置为只读。 同时

创建角色
RO默认为角色

改变角色

请记住,克服uset配置
事务\u只读
就像运行一条语句一样简单


创建角色不会授予
CONNECT
权限,如果需要,请使用
create USER

谢谢,这完全奏效了!你的名字应该是Wow:)是不是
事务\u只读
不能在与
创建角色
相同的语句中完成?不是真的,至少我从未尝试过,也没有记录:)用你的便条更新并添加了几个我的,作为nota bened谢意mucho!我很感激你的帮助:)谢谢你,这完全奏效了!你的名字应该是Wow:)是不是
事务\u只读
不能在与
创建角色
相同的语句中完成?不是真的,至少我从未尝试过,也没有记录:)用你的便条更新并添加了几个我的,作为nota bened谢意mucho!我感谢您的邀请:)