PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Utwórz rolę PostgreSQL (użytkownika), jeśli nie istnieje

Uprość w podobny sposób, jak miałeś na myśli:

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

(Budowanie na podstawie odpowiedzi @a_horse_with_no_name i ulepszone komentarzem @Gregory.)

W przeciwieństwie na przykład do CREATE TABLE nie ma IF NOT EXISTS klauzula CREATE ROLE (do co najmniej s. 12). A ty nie wykonywać dynamiczne instrukcje DDL w zwykłym SQL.

Twoja prośba o "unikanie PL/pgSQL" jest niemożliwa z wyjątkiem użycia innego PL. DO instrukcja używa plpgsql jako domyślnego języka proceduralnego. Składnia pozwala pominąć jawną deklarację:

DO [ LANGUAGE lang_name ] code
...
lang_name
Nazwa języka proceduralnego, w którym napisany jest kod. Jeśli pominięto, domyślnie jest to plpgsql .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL a PostgreSQL dla aplikacji internetowych

  2. Napraw „BŁĄD:każde zapytanie INTERSECT musi mieć taką samą liczbę kolumn” w PostgreSQL

  3. Zakres Rails - gdzie w dokładnych dopasowaniach

  4. Jak debugować procedury składowane postgresql?

  5. Czy mogę pisać funkcje PostgreSQL w Ruby on Rails?