首页 > 解决方案 > AWS Redshift:如果用户不存在,我可以使用案例语句创建新用户吗?

问题描述

我正在尝试在 AWS 中自动创建用户。但是,如果我只是编写用户创建脚本,如果重新运行并且用户已经存在,它们将失败。

我在 AWS Redshift 工作。

我希望能够做类似的事情

CREATE USER IF NOT EXISTS usr_name
   password '<random_secure_password>'
   NOCREATEDB
   NOCREATEUSER
;

但这似乎不可能。

然后我找到了 CASE 语句,但 CASE 语句似乎也不适用于我。

IE

CASE WHEN
   SELECT count(*) FROM pg_user WHERE usename = 'usr_name' = 0
   THEN
   CREATE USER usr_name
      password '<random_secure_password>'
      NOCREATEDB
      NOCREATEUSER
END

这行得通吗?(不是超级用户,所以我自己无法测试)

如果没有,有什么想法吗?有什么帮助,在此先感谢。

标签: sqldatabaseamazon-web-servicesamazon-redshift

解决方案


如果您使用的是 psql,则可以使用元\gexec命令:

 \t on
 BEGIN;

 SELECT CASE WHEN (SELECT count(*) FROM pg_user WHERE usename = 'nonesuch') = 0
        THEN 'CREATE USER nonesuch PASSWORD DISABLE'
        END
 \gexec

 SELECT CASE WHEN (SELECT count(*) FROM pg_user WHERE usename = 'nonesuch') = 0
        THEN 'CREATE USER nonesuch PASSWORD DISABLE'
        ELSE 'SELECT \'user already exists, doing nothing\''
        END
 \gexec

 ROLLBACK;

结果:

BEGIN
CREATE USER
user already exists, doing nothing
ROLLBACK

https://www.postgresql.org/docs/9.6/app-psql.html(注意你不能format()像例子中那样使用,因为它没有在 Redshift 中实现)


推荐阅读