sql >> Base de Datos >  >> RDS >> PostgreSQL

Crear ROL de PostgreSQL (usuario) si no existe

Simplifique de manera similar a lo que tenía en 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$;

(Basado en la respuesta de @a_horse_with_no_name y mejorado con el comentario de @Gregory).

A diferencia, por ejemplo, con CREATE TABLE no hay IF NOT EXISTS cláusula para CREATE ROLE (hasta al menos la página 12). Y tu no puedes ejecutar sentencias DDL dinámicas en SQL simple.

Su solicitud para "evitar PL/pgSQL" es imposible excepto mediante el uso de otro PL. El DO declaración utiliza plpgsql como lenguaje de procedimiento predeterminado. La sintaxis permite omitir la declaración explícita:

DO [ LANGUAGE lang_name ] code
...
lang_name
El nombre del lenguaje de procedimiento en el que está escrito el código. Si se omite, el valor predeterminado es plpgsql .