स्थायी रूप से Postgresql स्कीमा पथ सेट करें


136

मुझे पोस्टग्रेज में स्कीमा पथ सेट करने की आवश्यकता है ताकि मैं हर बार स्कीमा डॉट टेबल को निर्दिष्ट न करूं schema2.table। स्कीमा पथ सेट करें:

SET SCHEMA PATH a,b,c

केवल एक क्वेरी सत्र के लिए मैक पर काम करने के लिए लगता है, जब मैं क्वेरी विंडो को बंद करता हूं तो पथ चर डिफ़ॉल्ट रूप से वापस सेट हो जाता है।

मैं इसे स्थायी कैसे बना सकता हूं?


मुझे लगता है कि SET search_path TO a, b, c; जैसा कि उत्तर कहता है और SET SCHEMA PATH a, b, c को नहीं;
आर्मंडो

जवाबों:


168

(और यदि आपके पास सर्वर तक कोई व्यवस्थापक पहुंच नहीं है)

ALTER ROLE <your_login_role> SET search_path TO a,b,c;

जानने के लिए दो महत्वपूर्ण बातें:

  1. जब एक स्कीमा नाम सरल नहीं होता है, तो इसे दोहरे उद्धरण चिह्नों में लपेटने की आवश्यकता होती है।
  2. जिस क्रम में आप डिफ़ॉल्ट स्कीमा a, b, cमामलों को सेट करते हैं, क्योंकि यह वह क्रम भी है जिसमें स्कीमा को तालिकाओं के लिए देखा जाएगा। इसलिए यदि आपके पास डिफ़ॉल्ट के बीच एक से अधिक स्कीमा में समान तालिका नाम है, तो कोई अस्पष्टता नहीं होगी, सर्वर हमेशा आपके द्वारा निर्दिष्ट पहले स्कीमा से तालिका का उपयोग करेगा search_path

19
इसके अलावा a, b, c गणन के आस-पास के उद्धरणों का स्पष्ट रूप से उपयोग नहीं करने के लिए ध्यान देने योग्य है। पिछले 15 मिनट के लिए हाथ से माथे ...
Jmoney38

4
@ Jmoney38 एकल उद्धरण का उपयोग नहीं करने के लिए, लेकिन गैर-सरल स्कीमा नामों के लिए दोहरे उद्धरण आवश्यक हैं।
महत्वपूर्ण-टीपी

136

आप search_pathडेटाबेस स्तर पर डिफ़ॉल्ट सेट कर सकते हैं :

ALTER DATABASE <database_name> SET search_path TO schema1,schema2;

या उपयोगकर्ता या भूमिका स्तर पर:

ALTER ROLE <role_name> SET search_path TO schema1,schema2;

या यदि आपके पास अपने सभी डेटाबेस में एक सामान्य डिफ़ॉल्ट स्कीमा है, तो आप config_path विकल्प के साथ कॉन्फ़िग फ़ाइल में सिस्टम-वाइड डिफ़ॉल्ट सेट कर सकते हैं ।

जब एक डेटाबेस बनाया जाता है , तो इसे टेम्प्लेट 1 नामक एक छिपे हुए "टेम्पलेट" डेटाबेस से डिफ़ॉल्ट रूप से बनाया जाता है , आप भविष्य में बनाए गए सभी डेटाबेस के लिए एक नया डिफ़ॉल्ट खोज पथ निर्दिष्ट करने के लिए उस डेटाबेस को बदल सकते हैं। आप एक और टेम्पलेट डेटाबेस भी बना सकते हैं और CREATE DATABASE <database_name> TEMPLATE <template_name>अपने डेटाबेस बनाने के लिए उपयोग कर सकते हैं।


9
Psql

3
सेटिंग्स को प्रभावी करने के लिए सत्र को डिस्कनेक्ट करने और फिर से कनेक्ट करने की आवश्यकता है।
isapir

अरे आशीर्वाद दे दो। SQL सर्वर से PG में आया इसलिए यह सब मेरे लिए नया (और अजीब) है
Nate Anderson

24

जोश सही है लेकिन उन्होंने एक बदलाव छोड़ दिया:

ALTER ROLE <role_name> IN DATABASE <db_name> SET search_path TO schema1,schema2;

एक विशेष डेटाबेस में, उपयोगकर्ता के लिए खोज पथ सेट करें।


बहुत उपयोगी है। धन्यवाद
ऐलेजैंड्रो टेक्सेरा Muñoz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.