如果不存在,则创建PostgreSQL ROLE(user)

前端之家收集整理的这篇文章主要介绍了如果不存在,则创建PostgreSQL ROLE(user)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何写一个sql脚本在Postgresql 9.1中创建一个ROLE,但是如果它已经存在,不会产生错误

当前脚本只有:

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;

…但是这不工作 – IF似乎不支持在纯sql

我有一个批处理文件,创建一个Postgresql 9.1数据库,角色和一些其他的东西。它调用psql.exe,传入要运行的sql脚本的名称。到目前为止所有这些脚本都是纯sql,我想避免PL / pgsql等,如果可能的话。

基于 @a_horse_with_no_name的答案,我将简化与你已经想到的类似的方式:
DO
$body$
BEGIN
   IF NOT EXISTS (
      SELECT *
      FROM   pg_catalog.pg_user
      WHERE  usename = 'my_user') THEN

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

与例如CREATE TABLE不同,没有针对CREATE ROLE的IF NOT EXISTS子句。您不能在纯sql中执行动态DDL语句。

您的“避免PL / pgsql”的请求是不可能的(除非使用另一个PL)。 DO statement也使用PL / pgsql。语法允许省略显式声明:

DO [ LANGUAGE lang_name ] code

lang_name
The name of the procedural language the code is written in. If
omitted,the default is plpgsql.

原文链接:https://www.f2er.com/postgresql/193720.html

猜你在找的Postgre SQL相关文章