Anda memiliki setidaknya dua opsi.
Yang pertama menggunakan kueri kecil dan editor teks. Kami harus mengumpulkan skema yang menarik bagi kami:
SELECT nspname
FROM pg_namespace;
Anda dapat menambahkan WHERE
klausa jika Anda ingin membatasi ruang lingkup. Salin output dan ubah, sehingga Anda mendapatkan sejumlah GRANT USAGE ON SCHEMA ... TO your_role;
perintah. Kemudian cukup beri makan psql
, misalnya:
psql -f multigrant.sql
Varian yang biasa dari ini bisa berupa skrip shell yang mengulangi nama dan panggilan yang terkumpul psql
, meneruskan GRANT
pernyataan yang dibuat ke -c
opsi.
Solusi lain pada dasarnya sama dalam satu blok pl / pgsql, membangun kueri dinamis. Intinya sama - kita harus mengumpulkan schemata. Lalu kami mengulangi semuanya, memberikan skema izin dengan skema:
DO $do$
DECLARE
sch text;
BEGIN
FOR sch IN SELECT nspname FROM pg_namespace
LOOP
EXECUTE format($$ GRANT USAGE ON SCHEMA %I TO your_role $$, sch);
END LOOP;
END;
$do$;
Catatan :
- tidak seperti untuk tabel, urutan, fungsi dan tipe, seseorang tidak dapat menetapkan hak default untuk schemata (pada 9.4). Anda harus memberikan hak istimewa ini untuk skema yang baru ditambahkan secara manual.
- di sini saya menggunakan kutipan dolar ketika membangun kueri dinamis. Ini memungkinkan saya untuk menggunakan sintaks 'normal', sebagai lawan dari penggandaan tanda kutip tunggal, misalnya (tidak ada dalam contoh ini). Dengan cara ini kebanyakan editor akan menyoroti pernyataan dengan baik.
- Saya juga menggunakan
format()
dengan %I
format specifier memiliki nama objek benar dikutip jika diperlukan. Pendekatan ini jauh lebih mudah dibaca daripada membangun kueri dengan rangkaian konstanta string dan beberapa quote_ident()
panggilan.
pg_namespace
dapat ditemukan di pg_catalog
skema. Lihatlah benda-benda lain di sana - mereka menyimpan setiap aspek skema Anda, tabel dan sebagainya.
grant usage
skema baru.