दिलचस्प पोस्ट
PHP फ़ंक्शन में PHP फ़ंक्शन डेटा कैसे प्राप्त करें पायथन: एक शर्त के आधार पर एक सूची विभाजित? क्रोम गलत एमआईएमई प्रकार के कारण एक AJAX स्क्रिप्ट निष्पादित करने से इनकार करता है मैं एक ऑब्जेक्ट को रनटाइम पर कैसे जोड़ सकता हूं? PowerShell का उपयोग कर FTP के साथ फाइल अपलोड करें VB.net के InputDialog के सी # संस्करण क्या है? Mysqli_Query चेतावनी: mysqli_query () पैरामीटर 1 mysqli होने की उम्मीद JSON से यूनिकोड की जगह स्ट्रिंग ऑब्जेक्ट कैसे प्राप्त करें? Matplotlib और प्लॉट रंग स्केल का उपयोग करके अपना रंगमेट बनाएं संकेतक सी में बदल जाता है तो कितना मेमोरी मुक्त हो जाएगी? क्यों नहीं Perl मेरी फाइल है जो ClearCase में है ढूँढ सकते हैं? एम्बेडेड संसाधन के रूप में एक डीएलएल को दूसरे में डालने और फिर उसे अपने कोड से बुला रहा है एक सरणी का पहला तत्व प्राप्त करें खिड़कियों के लिए नर्स उपलब्ध है? .resx फ़ाइल में सभी संसाधनों के माध्यम से लूप

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

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

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

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

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

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

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

% 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 इसके लिए जारी नहीं किया गया था।