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

Opret PostgreSQL ROLLE (bruger), hvis den ikke findes

Forenkle på samme måde, som du havde i tankerne:

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

(Bygger på @a_horse_with_no_names svar og forbedret med @Gregorys kommentar.)

I modsætning til for eksempel med CREATE TABLE der er ingen IF NOT EXISTS klausul for CREATE ROLE (op til mindst side 12). Og du kan ikke udføre dynamiske DDL-sætninger i almindelig SQL.

Din anmodning om at "undgå PL/pgSQL" er umulig undtagen ved at bruge en anden PL. DO statement bruger plpgsql som standard proceduresprog. Syntaksen tillader at udelade den eksplicitte erklæring:

DO [ LANGUAGE lang_name ] code
...
lang_name
Navnet på det proceduresprog, koden er skrevet på. Hvis udeladt, er standarden plpgsql .



  1. SQLite dato og klokkeslæt funktioner

  2. SQL Server tuning - det handler om måling

  3. Sådan konfigureres asynkron replikering fra Galera Cluster til selvstændig MySQL-server med GTID

  4. Indre Sammenføjning af tre borde