sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL-ROLE (gebruiker) maken als deze niet bestaat

Vereenvoudig op een vergelijkbare manier als wat u in gedachten had:

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

(Voortbouwend op het antwoord van @a_horse_with_no_name en verbeterd met de opmerking van @Gregory.)

In tegenstelling tot bijvoorbeeld CREATE TABLE er is geen IF NOT EXISTS clausule voor CREATE ROLE (tot minimaal pg 12). En jij kan niet voer dynamische DDL-instructies uit in gewone SQL.

Uw verzoek om "PL/pgSQL te vermijden" is onmogelijk behalve door een andere PL te gebruiken. De DO statement gebruikt plpgsql als standaard proceduretaal. De syntaxis maakt het mogelijk om de expliciete declaratie weg te laten:

DO [ LANGUAGE lang_name ] code
...
lang_name
De naam van de proceduretaal waarin de code is geschreven. Indien weggelaten, is de standaard plpgsql .



  1. Effect van NOLOCK-hint in SELECT-instructies

  2. php-code om pdo te testen is beschikbaar?

  3. SqlConnection SqlCommand SqlDataReader IDisposable

  4. Hoe de dagnaam van een datum in Oracle te krijgen