PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Crea PostgreSQL ROLE (utente) se non esiste

Semplifica in modo simile a quello che avevi in ​​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$;

(Basato sulla risposta di @a_horse_with_no_name e migliorato con il commento di @Gregory.)

Diversamente, ad esempio, con CREATE TABLE non esiste IF NOT EXISTS clausola per CREATE ROLE (fino ad almeno pag. 12). E tu non puoi eseguire istruzioni DDL dinamiche in semplice SQL.

La tua richiesta di "evitare PL/pgSQL" è impossibile se non utilizzando un altro PL. Il DO istruzione usa plpgsql come linguaggio procedurale predefinito. La sintassi permette di omettere la dichiarazione esplicita:

DO [ LANGUAGE lang_name ] code
...
lang_name
Il nome del linguaggio procedurale in cui è scritto il codice. Se omesso, il valore predefinito è plpgsql .