postgres 仅当用户不存在时才创建用户

kpc*_*der 0 sql postgresql

我很少有 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 脚本中使用代码块,则可能需要对 $ 使用转义字符(例如 $)。