PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL ROLE (Benutzer) erstellen, falls nicht vorhanden

Vereinfachen Sie auf ähnliche Weise wie Sie es sich vorgestellt haben:

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

(Baut auf der Antwort von @a_horse_with_no_name auf und wurde durch den Kommentar von @Gregory verbessert.)

Anders beispielsweise bei CREATE TABLE es gibt kein IF NOT EXISTS -Klausel für CREATE ROLE (bis mindestens S. 12). Und das können Sie nicht Ausführen dynamischer DDL-Anweisungen in einfachem SQL.

Ihre Bitte, „PL/pgSQL zu vermeiden“, ist unmöglich, es sei denn, Sie verwenden einen anderen PL. Das DO -Anweisung verwendet plpgsql als Standardprozedursprache. Die Syntax erlaubt es, die explizite Deklaration wegzulassen:

DO [ LANGUAGE lang_name ] code
...
lang_name
Der Name der prozeduralen Sprache, in der der Code geschrieben ist. Wenn weggelassen, ist der Standardwert plpgsql .