我很少有 CREATE 用户作为 myquery.sql 文件的一部分,并且它也包含很少的其他查询
我的文件看起来像这样
CREATE USER myuser NOLOGIN;
GRANT CONNECT on DATABSE myDataBase to myuser;
GRANT USAGE ON SCHEAMA myschema to myuser;
Run Code Online (Sandbox Code Playgroud)
我在同一个文件中很少有这样的查询,由于某种原因,我需要向同一个文件添加新查询,当再次执行同一个文件时,我坚持错误用户已经存在,并且无法到达新添加的查询。
我还检查了 postgres 中没有 IF NOT EXISTS 类型的 CREATE USER 帮助。
那么如何添加检查以仅在不存在时创建用户。
小智 5
我不知道你所说的“IF NOT EXISTS在 postgres 中没有对 CREATE USER 的帮助”是什么意思。快速搜索得到了这个,这将允许您使用 plpgsql 来进行检查:
DO
$do$
BEGIN
IF NOT EXISTS ( SELECT FROM pg_roles
WHERE rolname = 'my_user') THEN
CREATE USER myuser NOLOGIN;
GRANT CONNECT on DATABSE myDataBase to myuser;
GRANT USAGE ON SCHEMA myschema to myuser;
END IF;
END
$do$;
Run Code Online (Sandbox Code Playgroud)
从这里。或者,您可以捕获重复用户的任何异常,以便查询的其余部分顺利运行,没有任何竞争条件;甚至在该线程的更深处还有一些 bash 替代方案。
注意:如果您在 shell 脚本中使用代码块,则可能需要对 $ 使用转义字符(例如 $)。