通过在变量中传递密码,在Postgres中使用CREATE USER

时间:2018-03-02 15:48:12

标签: postgresql

我在PostgreSQL中有以下功能:

create function test_createuser(username varchar, userpassword varchar) returns void as $$
begin
  CREATE USER username WITH PASSWORD userpassword;
end;
$$ language plpgsql;

然而,这会产生以下错误:

syntax error at or near "userpassword"

如果我将一个文字字符串作为密码,例如' mypassword',则编译该函数。

有没有办法调用create user并从变量中传递密码?

2 个答案:

答案 0 :(得分:1)

您必须使用动态SQL:

EXECUTE format('CREATE USER %I PASSWORD %L', username, userpassword);

答案 1 :(得分:1)

使用EXECUTE方法仍然遇到相同的解析错误(错误:“ 2”或附近的语法错误-注意:密码以“ 2”开头)。 相反,当我从环境变量读取密码时,我添加了字符串引号。

\set psqluser `echo "$PSQL_USER"`
\set psqlpassword `echo "'$PSQL_PASSWORD'"`    -- Add the quotations '' for the password already here
CREATE USER :psqluser WITH ENCRYPTED PASSWORD :psqlpassword;

我不知道这是否是一种很好的做法,但是它可以工作。