sql >> Databasteknik >  >> RDS >> PostgreSQL

Skapa PostgreSQL-ROL (användare) om den inte finns

Förenkla på ett liknande sätt som du tänkt dig:

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 och förbättras med @Gregorys kommentar.)

Till skillnad från till exempel med CREATE TABLE det finns ingen IF NOT EXISTS sats för CREATE ROLE (upp till minst sid 12). Och du kan inte exekvera dynamiska DDL-satser i vanlig SQL.

Din begäran att "undvika PL/pgSQL" är omöjlig förutom genom att använda en annan PL. DO uttalandet använder plpgsql som standardspråk för procedur. Syntaxen tillåter att den explicita deklarationen utelämnas:

DO [ LANGUAGE lang_name ] code
...
lang_name
Namnet på det procedurspråk som koden är skriven på. Om det utelämnas är standardinställningen plpgsql .



  1. Hur exporterar man bildfält till fil?

  2. Konvertera den nya raden till XML i en Oracle Trigger

  3. PostgreSQL motsvarighet till Oracle bulk collect

  4. Att ha både en skapad och senast uppdaterad tidsstämpelskolumn i MySQL 4.0