PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Buat PERAN PostgreSQL (pengguna) jika tidak ada

Sederhanakan dengan cara yang mirip dengan apa yang Anda pikirkan:

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

(Membangun jawaban @a_horse_with_no_name dan ditingkatkan dengan komentar @Gregory.)

Tidak seperti, misalnya, dengan CREATE TABLE tidak ada IF NOT EXISTS klausa untuk CREATE ROLE (sampai setidaknya hal 12). Dan Anda tidak bisa mengeksekusi pernyataan DDL dinamis dalam SQL biasa.

Permintaan Anda untuk "menghindari PL/pgSQL" tidak mungkin dilakukan kecuali dengan menggunakan PL lain. DO pernyataan menggunakan plpgsql sebagai bahasa prosedural default. Sintaksnya memungkinkan untuk menghilangkan deklarasi eksplisit:

DO [ LANGUAGE lang_name ] code
...
lang_name
Nama bahasa prosedur yang digunakan untuk menulis kode. Jika dihilangkan, defaultnya adalah 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. Dapatkan nilai serial default setelah INSERT di dalam PL/pgSQL

  2. PostgreSQL:INSERT Serbaguna

  3. Bagaimana cara menonaktifkan integritas referensial di Postgres 8.2?

  4. Bagaimana memahami ANALISIS JELASKAN

  5. Perbedaan antara cap waktu dengan/tanpa zona waktu di PostgreSQL