我在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并从变量中传递密码?
答案 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;
我不知道这是否是一种很好的做法,但是它可以工作。