sql >> Databáze >  >> RDS >> PostgreSQL

Vytvořte PostgreSQL ROLE (uživatel), pokud neexistuje

Zjednodušte podobným způsobem, jako jste měli na mysli:

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

(Vychází z odpovědi @a_horse_with_no_name a je vylepšeno komentářem @Gregory.)

Na rozdíl například od CREATE TABLE neexistuje žádný IF NOT EXISTS klauzule pro CREATE ROLE (nejméně do str. 12). A vy nemůžete provádět dynamické příkazy DDL v prostém SQL.

Váš požadavek na "vyhnutí se PL/pgSQL" je nemožný kromě použití jiného PL. DO příkaz používá plpgsql jako výchozí procedurální jazyk. Syntaxe umožňuje vynechat explicitní deklaraci:

DO [ LANGUAGE lang_name ] code
...
lang_name
Název procedurálního jazyka, ve kterém je kód napsán. Pokud není vynechán, výchozí je plpgsql .



  1. Fáze optimalizace a promarněné příležitosti

  2. Odstraňte více řádků zaškrtnutím políček pomocí PHP

  3. Je jedinečný klíč SQL Server také index?

  4. Změňte oddělovač na čárku při odesílání výsledků dotazu e-mailem na SQL Server (T-SQL)