sql - 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
这行得通吗?(不是超级用户,所以我自己无法测试)
如果没有,有什么想法吗?有什么帮助,在此先感谢。
解决方案
如果您使用的是 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 中实现)
推荐阅读
- java - 在 Esper CEP 的运行时更改 EPL 语句
- django - django_filters 自定义方法字段名
- javascript - 正则表达式选择相邻的模式匹配项作为单个项
- f# - 在 F# 中,是否可以为元组实现运算符?
- python - 预计会看到 1 个数组,但得到了以下 100 个数组的列表
- c++ - 了解模板与自动功能的 decltype(auto) 差异
- security - 为了安全而修改探测响应后不进行身份验证
- python - 检查 python 列表中的序列
- c++ - 分配给枚举 - c/c++ 中需要的左值
- laravel - 尝试编辑管理员时“尝试获取非对象的属性'类型'”