PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Crie PostgreSQL ROLE (usuário) se não existir


Simplifique de maneira semelhante ao que você tinha em mente:
DO
$do$
BEGIN
   IF NOT EXISTS (
      SELECT FROM pg_catalog.pg_roles  -- SELECT list can be empty for this
      WHERE  rolname = 'my_user') THEN

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

(Com base na resposta de @a_horse_with_no_name e melhorado com o comentário de @Gregory.)

Ao contrário, por exemplo, com CREATE TABLE não existe IF NOT EXISTS cláusula para CREATE ROLE (até pelo menos a página 12). E você não pode execute instruções DDL dinâmicas em SQL simples.

Sua solicitação para "evitar PL/pgSQL" é impossível, exceto usando outro PL. O DO A instrução usa plpgsql como linguagem procedural padrão. A sintaxe permite omitir a declaração explícita:

DO [ LANGUAGE lang_name ] code
...
lang_name
O nome da linguagem procedural em que o código está escrito. Se for omitido, o padrão é plpgsql .