PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Създайте PostgreSQL ROLE (потребител), ако не съществува

Опростете по подобен начин на това, което сте имали предвид:

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

(На основата на отговора на @a_horse_with_no_name и подобрено с коментара на @Gregory.)

За разлика, например, с CREATE TABLE няма IF NOT EXISTS клауза за CREATE ROLE (до поне стр. 12). И тине може изпълнява динамични DDL изрази в обикновен SQL.

Вашата заявка за "избягване на PL/pgSQL" е невъзможна, освен чрез използване на друг PL. DO изразът използва plpgsql като процедурен език по подразбиране. Синтаксисът позволява да се пропусне изричната декларация:

DO [ LANGUAGE lang_name ] code
...
lang_name
Името на процедурния език, на който е написан кодът. Ако е изключено, по подразбиране е 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. Мога ли да напиша PostgreSQL функции на Ruby on Rails?

  2. Гарантирано ли е запазване на реда в подзаявка?

  3. Надстройте PostgreSQL от 9.6 до 10.0 на Ubuntu 16.10

  4. Postgresql заявка между периоди от време

  5. Тестове на Parallel Go, изпълнени срещу PostgreSQL база данни, работеща на Docker