दिलचस्प पोस्ट
मैं पायथन के itertools.groupby () का उपयोग कैसे करूं? गैर-वेब एसक्यूएल इंजेक्शन भूमिका आधारित अभिगम नियंत्रण UINavigationBar पारदर्शी बनाओ उपप्रोसेस पॉपने पायथन का उपयोग कैसे करें NSJSONSerialization का उपयोग कैसे करें -पैथथ और -एल के बीच क्या अंतर है? CUDA ब्लॉक / युद्ध / धागे CUDA कोर पर कैसे नक्शा करते हैं? Jquery का उपयोग कर एक div के अंदर केवल पाठ को बदलें जावा में ब्रेसिज़ की एक अनिवार्य जोड़ी के साथ एक लाइन-लूप PHPUnit में मॉक – विभिन्न तर्कों के साथ एक ही विधि के एकाधिक कॉन्फ़िगरेशन Gradle संस्करण 1.10 की आवश्यकता है। वर्तमान संस्करण 2.0 है कैसे स्विफ्ट में ViewController खारिज करने के लिए? वसंत एमवीसी में ऑब्जेक्ट से एजेक्स को ऑब्जेक्ट कैसे वापस करना एक फ़ाइल को सुरक्षित रूप से लिखने के लिए पायथन मल्टीप्रोसेसिंग

कैसे खोज_पथ प्रभाव पहचानकर्ता संकल्प और "वर्तमान स्कीमा"

क्या यह परिभाषित करना संभव है कि स्कीमा नई तालिकाओं को डिफ़ॉल्ट रूप से कैसे बनाया जाए? ("अयोग्य तालिका नाम" के संदर्भ में।)

मैंने पोस्टग्रेज़ में "खोज पथ" का उपयोग करने के बारे में कुछ विवरण देखे हैं, लेकिन मुझे लगता है कि यह केवल डेटा पुनर्प्राप्त करते समय काम करता है, न कि बनाना

मेरे पास SQL ​​स्क्रिप्ट्स का एक गुच्छा है, जो कई टेबल बनाते हैं स्क्रिप्ट संशोधित करने के बजाय, मैं डिफ़ॉल्ट रूप से एक विशिष्ट स्कीमा में डेटाबेस बनाने टेबल सेट करना चाहता हूं – जब उनके पास अयोग्य नाम हैं

क्या यह संभव है?

Solutions Collecting From Web of "कैसे खोज_पथ प्रभाव पहचानकर्ता संकल्प और "वर्तमान स्कीमा""

खोज पथ वास्तव में आप क्या चाहते हैं:

% create schema blarg; % set search_path to blarg; % create table foo (id int); % \d List of relations Schema | Name | Type | Owner --------+------+-------+------- blarg | foo | table | pgsql 

खोज पथ क्या है?

प्रति प्रलेखन:

[…] तालिकाओं को अक्सर अयोग्य नाम से जाना जाता है, जिसमें तालिका नाम शामिल होता है। सिस्टम निर्धारित करता है कि कौन सा तालिका खोज पथ का अनुसरण कर रही है, जो कि देखने के लिए स्कीमा की एक सूची है

बोल्ड जोर खान यह पहचानकर्ता संकल्प बताता है, और "वर्तमान स्कीमा" प्रति दस्तावेज है:

खोज पथ में नामित पहली स्कीमा को वर्तमान स्कीमा कहा जाता है। खोज की पहली स्कीमा होने के अलावा, यह स्कीमा भी है जिसमें नया टेबल बनाए जाए यदि CREATE TABLE कमांड स्कीमा नाम निर्दिष्ट नहीं करती है।

बोल्ड जोर खान सिस्टम pg_temp (वर्तमान सत्र के अस्थायी वस्तुओं के लिए स्कीमा) और pg_catalog स्वचालित रूप से खोज पथ का हिस्सा हैं और पहले इस क्रम में खोज की गई हैं। प्रति प्रलेखन:

pg_catalog हमेशा प्रभावी रूप से खोज पथ का हिस्सा है। यदि इसे पथ में स्पष्ट रूप से नामित नहीं किया गया है, तो पथ की स्कीमा खोज करने से पहले यह निहित है। यह सुनिश्चित करता है कि अंतर्निहित नाम हमेशा खोज योग्य होंगे। हालांकि, यदि आप उपयोगकर्ता-निर्धारित नामों को अंतर्निहित नाम ओवरराइड करना पसंद करते हैं, तो आप स्पष्ट रूप से अपने खोज पथ के अंत में pg_catalog को जगह कर सकते हैं

मूल के अनुसार बोल्ड जोर और pg_temp पहले आता है, जब तक कि इसे किसी भिन्न स्थिति में नहीं रखा जाता है।

इसे कैसे सेट करें?

आपके पास रनटाइम वेरिएबल search_path वास्तव में सेट करने के लिए कई विकल्प हैं

  1. postgresql.conf (और पुनः लोड) में सभी डेटाबेस में सभी भूमिकाओं के लिए एक क्लस्टर -व्याभरी डिफ़ॉल्ट सेट करें। उस के साथ सावधान!

     search_path = 'blarg,public' 

    इस सेटिंग के लिए भेज दी गई डिफ़ॉल्ट है:

     search_path = "$user",public 

    पहला तत्व निर्दिष्ट करता है कि वर्तमान उपयोगकर्ता के नाम के साथ एक स्कीमा खोजा जा रहा है। यदि ऐसा कोई स्कीमा मौजूद नहीं है, तो प्रविष्टि को नजरअंदाज किया जाता है।

  2. इसे एक डेटाबेस के लिए डिफ़ॉल्ट के रूप में सेट करें:

     ALTER DATABASE test SET search_path = blarg,public; 
  3. जिस भूमिका के साथ आप कनेक्ट हो (प्रभावी क्लस्टर चौड़ा) के लिए इसे डिफ़ॉल्ट के रूप में सेट करें:

     ALTER ROLE foo SET search_path = blarg,public; 
  4. या यहां तक ​​कि (अक्सर सबसे अच्छा!) किसी दिए गए डेटाबेस में भूमिका के लिए डिफ़ॉल्ट के रूप में :

     ALTER ROLE foo IN DATABASE test SET search_path = blarg,public; 
  5. अपनी स्क्रिप्ट के शीर्ष पर कमांड लिखें (या इसे अपने सत्र में किसी भी बिंदु पर निष्पादित करें:

     SET search_path = blarg,public; 
  6. फ़ंक्शन के दायरे के लिए विशिष्ट search_path सेट करें (पर्याप्त विशेषाधिकार वाले दुर्भावनापूर्ण उपयोगकर्ताओं से सुरक्षित होने के लिए) मैन्युअल में सुरक्षित रूप से SECURITY DEFINER कार्यों के बारे में पढ़ें।

 CREATE FUNCTION foo() RETURNS void AS $func$ BEGIN -- do stuff END $func$ LANGUAGE plpgsql SECURITY DEFINER SET search_path=blarg,public,pg_temp ; 

मेरी सूची में अधिक से अधिक संख्या में कम संख्याएं छीनती हैं
मैन्युअल में और भी अधिक तरीके हैं , जैसे पर्यावरण चर सेट करना या कमांड लाइन विकल्पों का उपयोग करना।

वर्तमान सेटिंग को देखने के लिए:

 SHOW search_path; 

इसे रीसेट करने के लिए:

 RESET search_path; 

प्रति प्रलेखन :

डिफ़ॉल्ट मान को उस मूल्य के रूप में परिभाषित किया गया है जो पैरामीटर में होता, यदि वर्तमान सत्र में कोई भी SET इसके लिए जारी नहीं किया गया था।