PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Créer PostgreSQL ROLE (utilisateur) s'il n'existe pas

Simplifiez de la même manière que ce que vous aviez en tête :

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$;

(S'appuyant sur la réponse de @a_horse_with_no_name et amélioré avec le commentaire de @Gregory.)

Contrairement, par exemple, à CREATE TABLE il n'y a pas de IF NOT EXISTS clause pour CREATE ROLE (jusqu'à au moins la page 12). Et vous ne pouvez pas exécuter des instructions DDL dynamiques en SQL brut.

Votre demande "d'éviter PL/pgSQL" est impossible sauf en utilisant un autre PL. Le DO L'instruction utilise plpgsql comme langage procédural par défaut. La syntaxe permet d'omettre la déclaration explicite :

DO [ LANGUAGE lang_name ] code
lang_name
Le nom du langage procédural dans lequel le code est écrit. Si omis, la valeur par défaut est plpgsql .