PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Tạo VAI TRÒ PostgreSQL (người dùng) nếu nó không tồn tại

Đơn giản hóa theo cách tương tự như những gì bạn đã nghĩ:

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

(Dựa trên câu trả lời của @ a_horse_with_no_name và được cải thiện với nhận xét của @ Gregory.)

Chẳng hạn, không giống như với CREATE TABLE không có IF NOT EXISTS mệnh đề cho CREATE ROLE (tối thiểu là pg 12). Và bạn không thể thực thi các câu lệnh DDL động trong SQL thuần túy.

Yêu cầu của bạn để "tránh PL / pgSQL" là không thể ngoại trừ bằng cách sử dụng PL khác. DO câu lệnh sử dụng plpgsql làm ngôn ngữ thủ tục mặc định. Cú pháp cho phép bỏ qua khai báo rõ ràng:

DO [ LANGUAGE lang_name ] code
...
lang_name
Tên của ngôn ngữ thủ tục mà mã được viết. Nếu được mã hóa, giá trị mặc định là 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. Postgres kiểu dữ liệu ENUM hoặc KIỂM TRA CONSTRAINT?

  2. Làm cách nào để thay đổi cột hiện có thành Identity trong PostgreSQL 11.1

  3. Sau khi khôi phục, chuỗi cơ sở dữ liệu của tôi bị xóa khỏi cột trong Postgresql

  4. Ghi chú về Chỉ mục B-Tree PostgreSQL

  5. Truy vấn PostgreSQL rất chậm với giới hạn 1