2013-10-02 3 views
7

मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जिसे एकाधिक स्कीमा पर hstore का उपयोग करने की आवश्यकता है। 'सार्वजनिक' स्कीमा, जहां hstore एक्सटेंशन इंस्टॉल किया जा रहा था, हर जगह उपलब्ध नहीं है, क्योंकि मेरा दायरा 'सार्वजनिक' पर नहीं दिखता है। कुछ प्रयासों पर, मैंने 'hstore' नामक एक स्कीमा पर एक्सटेंशन बनाया है और इस्तेमाल किए गए प्रत्येक उपलब्ध स्कोप (खोज पथ) पर स्कीमा का उपयोग किया है।पोस्टग्रेज़ डेटाबेस में एकाधिक स्कीमा पर hstore स्थापित करने का सबसे अच्छा तरीका?

इस आधार पर, मैं कुछ सवाल है:

  • यह सिर्फ विस्तार के लिए एक स्कीमा बनाने के लिए ठीक है? या क्या प्रत्येक स्कीमा पर विस्तार करना बेहतर है (जैसे, customer_1, customer_2, और इसी तरह ...)?

  • क्या एक अलग स्कीमा में एक्सटेंशन का निर्माण प्रभावित होता है जहां डेटा संग्रहीत किया जाता है? मैं बैकअप/पुनर्स्थापित करना आसान बनाने के लिए कई स्कीमा का उपयोग कर रहा हूं, और वास्तव में एक स्कीमा पर एक छिपी हुई तालिका (pg_large_objects ब्लॉब्स के लिए) में मेरे सभी hstore डेटा को स्टोर करने के लिए पीजी नहीं चाहता हूं।

उत्तर

6

प्रति डेटाबेस कई बार एक्सटेंशन इंस्टॉल करने की अनुमति नहीं है। the manual on CREATE EXTENSION का हवाला देते हुए:

याद रखें कि एक्सटेंशन ने स्वयं को किसी भी योजना के अंतर्गत नहीं माना जाता है: एक्सटेंशन अयोग्य ऐसे नाम हैं जो अद्वितीय डेटाबेस चौड़ा होना चाहिए है। लेकिन एक्सटेंशन से संबंधित वस्तुएं स्कीमा के भीतर हो सकती हैं।

आप अपने search_path में public शामिल एक समर्पित स्कीमा (उदाहरण: extensions) में "सार्वजनिक" एक्सटेंशन स्थापित करने के नहीं करना चाहते हैं। मैं उन सभी के लिए एक स्कीमा का उपयोग करूंगा, प्रत्येक एक्सटेंशन के लिए एक अलग स्कीमा नहीं। There are quite a few of them. CREATE EXTENSION अपनी पसंद के किसी मौजूदा स्कीमा को स्थापित करने के लिए एक विकल्प प्रदान करता है:

CREATE EXTENSION hstore SCHEMA extensions; 

और सुनिश्चित करें कि स्कीमा उपयोगकर्ताओं को, जो इसका इस्तेमाल कर सकते हैं कि के search_path में शामिल किया गया है।

डाटा भंडारण स्कीमा विस्तार में रहता है से सब पर प्रभावित नहीं है।

+0

'एक्सटेंशन पर विस्तार hstore स्थापित करने के लिए 'स्कीमा को search_path में जोड़ा जाना चाहिए, सही? – Qcom

+1

@Qcom: सही। और search_path में स्कीमा का अनुक्रम भी प्रासंगिक है। * या * आपको उन सभी ऑब्जेक्ट्स को स्कीमा-अर्हता प्राप्त करना है जिन्हें आप संदर्भित करना चाहते हैं - ऑपरेटरों सहित! विवरण: http://stackoverflow.com/questions/22975599/how-to-use-operator-from-the-extension-pg-trgm/22975642#22975642 –

+0

क्या समर्पित में एक्सटेंशन इंस्टॉल करने में स्पष्टता के अलावा कोई स्पष्ट लाभ है जनता का उपयोग करने के बजाय स्कीमा? – Qcom

0

इस प्रयास करें सभी स्कीमा

create extension hstore schema pg_catalog; 
+0

मुझे नहीं लगता कि 'pg_catalog' में गैर-मूल चीजों को स्टोर करना एक अच्छा विचार है –

संबंधित मुद्दे