आपके पास कम से कम दो विकल्प हैं।
पहले एक छोटी क्वेरी और एक पाठ संपादक का उपयोग करता है। हमें अपनी रुचि के स्कीमा को एकत्र करना होगा:
SELECT nspname
FROM pg_namespace;
WHEREयदि आप दायरा सीमित करना चाहते हैं तो आप एक खंड जोड़ सकते हैं । आउटपुट को कॉपी करें और इसमें संशोधन करें, ताकि आपको कई GRANT USAGE ON SCHEMA ... TO your_role;कमांड मिलें। फिर psqlउदाहरण के लिए , इसे फ़ीड करें :
psql -f multigrant.sql
इसका एक सामान्य संस्करण एक शेल स्क्रिप्ट हो सकता है जो एकत्र किए गए नामों और कॉल पर लूप करता है psql, विकल्प के GRANTलिए निर्मित कथन पास करता -cहै।
दूसरा समाधान मूल रूप से एक pl / pgsql ब्लॉक में एक ही करता है, एक गतिशील क्वेरी का निर्माण करता है। कोर एक ही है - हमें स्कीमाटा इकट्ठा करना होगा। फिर हम सभी को लूप करते हैं, स्कीमा द्वारा अनुमति स्कीमा प्रदान करते हुए:
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$;
नोट :
- तालिकाओं, अनुक्रमों, कार्यों और प्रकारों के विपरीत, कोई स्कीमाता के लिए डिफ़ॉल्ट विशेषाधिकार सेट नहीं कर सकता (9.4 के रूप में)। आपको मैन्युअल रूप से किसी भी नए जोड़े गए स्कीमा के लिए यह विशेषाधिकार देना होगा।
- यहाँ मैं गतिशील क्वेरी का निर्माण करते समय डॉलर के उद्धरण का उपयोग कर रहा हूँ । यह मुझे 'सामान्य' वाक्यविन्यास का उपयोग करने की अनुमति देता है, उदाहरण के लिए एकल उद्धरण को गुणा करने के विपरीत, (इस उदाहरण में मौजूद नहीं)। इस तरह से अधिकांश संपादक अच्छी तरह से बयानों को उजागर करेंगे।
- यदि आवश्यक हो तो वस्तु का नाम ठीक से उद्धृत करने के लिए मैं प्रारूप विनिर्देशक के
format()साथ भी उपयोग करता हूं %I। स्ट्रिंग स्थिरांक और कुछ quote_ident()कॉल के संयोजन के साथ क्वेरी बनाने की तुलना में यह दृष्टिकोण कहीं अधिक पठनीय है ।
pg_namespacepg_catalogस्कीमा में पाया जा सकता है । वहां की अन्य वस्तुओं को देखें - वे आपके स्कीमा, टेबल आदि के हर पहलू को संग्रहीत करते हैं।
grant usageसे नए स्कीमा के लिए चलता है ।