如果PostgreSQL角色(User)不存在,则创建它,如何实现?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (106)

如何编写一个SQL脚本来在PostgreSQL 9.1中创建一个角色,但如果它已经存在,则不会引发错误?

当前脚本只包含:

CREATE ROLE my_user LOGIN PASSWORD 'my_password';

如果用户已经存在,则此操作将失败。我想要这样的东西:

IF NOT EXISTS (SELECT * FROM pg_user WHERE username = 'my_user')
BEGIN
    CREATE ROLE my_user LOGIN PASSWORD 'my_password';
END;

...但这不管用

我有一个批处理文件,它创建一个PostgreSQL 9.1数据库、角色和其他一些东西。它调用psql.exe,传入要运行的SQL脚本的名称。到目前为止,所有这些脚本都是普通SQL。

提问于
用户回答回答于

DO
$body$
BEGIN
   IF NOT EXISTS (
      SELECT                       -- SELECT list can stay empty for this
      FROM   pg_catalog.pg_user
      WHERE  usename = 'my_user') THEN

      CREATE ROLE my_user LOGIN PASSWORD 'my_password';
   END IF;
END
$body$;

用户回答回答于

或者,如果角色不是可以使用的任何db对象的所有者,则:

DROP ROLE IF EXISTS my_user;
CREATE ROLE my_user LOGIN PASSWORD 'my_password';

扫码关注云+社区