PostGIS में जनता के अलावा अन्य स्कीमा का उपयोग करना?


21

मैं फिलहाल Ubuntu पर PostGIS 2.0.2 और PostgreSQL 9.1.6 की एक नई स्थापना स्थापित कर रहा हूं। मैं हाल ही में कुछ सूचनाएँ दिखा रहा हूँ जो यह बताती हैं कि सभी डेटा को संग्रहीत करने के लिए सार्वजनिक स्कीमा का उपयोग करना एक अच्छा विचार नहीं है।

इस कारण से, मैंने डेटा नामक स्कीमा की स्थापना की है और खुद को मालिक बनाया है, लेकिन क्या यह एक अच्छा विचार है?

मेरी चिंताएं हैं:

  1. मालिक की स्थापना के अलावा, मुझे इस नए स्कीमा (pgAdmin III के माध्यम से) को बनाते समय विशेषाधिकार टैब पर चीजों पर ध्यान देने की आवश्यकता हो सकती है;
  2. मुझे सार्वजनिक स्कीमा में अपना डेटा संग्रहीत करने और बैकअप / पुनर्स्थापना करने से पहले सभी डेटा को एक अलग स्कीमा में डंप करने से समान लाभ नहीं मिल सकता है (यह ogr2ogr का उपयोग करते समय कुछ कीस्ट्रोक्स को बचाएगा); तथा
  3. मैं अपने नए डेटा स्कीमा में डिफ़ॉल्ट PostGIS टेबल और दृश्य नहीं होने से परेशानी में पड़ सकता हूं (वे एक ही डेटाबेस में सार्वजनिक स्कीमा में हैं)।

1
यहाँ नया जवाब की जाँच करें gis.stackexchange.com/a/270522/6052
इवान कैरोल

3
हां, यह अभी भी मान्य है। मुख्य बिंदु यह क्लीनर है, क्योंकि आप उपयोगकर्ता डेटा को सिस्टम डेटा और फ़ंक्शन से अलग करते हैं।
जॉन पॉवेल

मैं PostGIS उपयोगकर्ता नहीं हूं, लेकिन मुझे संदेह है कि आपके प्रश्न का सबसे अच्छा उत्तर अब gis.stackexchange.com/a/270522/115 हो सकता है, इसलिए यदि आप सहमत हैं तो मैं आपको इसके लिए अपना एक्सेप्ट चेकमार्क स्थानांतरित करने के लिए प्रोत्साहित करूंगा।
PolyGeo

1
यह प्रश्न दो प्रश्न होने चाहिए। स्वीकृत उत्तर प्रश्न के लिखित रूप में उत्तर नहीं देता है। यह प्रश्न फिर से खोला जाना चाहिए क्योंकि यह इस प्रश्न का डुप्लिकेट नहीं है, जो यह पूछ रहा है कि क्या PostGIS ऑब्जेक्ट्स publicस्कीमा में नहीं वस्तुओं के साथ काम कर सकते हैं । अन्य प्रश्न पोस्टगेस एक्सटेंशन ऑब्जेक्ट को स्कीमा में स्थापित करने के अलावा है public। ये दो अलग-अलग चीजें हैं!
केनी एविट

जवाबों:


7

इसे अब आधिकारिक साइट पर एक अलग स्कीमा में मूव पोस्टजीआईएस एक्सटेंशन नामक पृष्ठ पर संबोधित किया गया है । एक्सटेंशन को स्थापित करने के लिए सही विधि है public। यह एकमात्र विकल्प है। विस्तार अब पुनर्वास का समर्थन नहीं करता है। अगली बात निम्नलिखित कमांड चलाने के लिए है, (साइट से कॉपी),

UPDATE pg_extension 
  SET extrelocatable = TRUE 
    WHERE extname = 'postgis';

ALTER EXTENSION postgis 
  SET SCHEMA postgis;

2
यह प्रश्न के लिखित रूप में उत्तर नहीं देता है; यह स्वीकृत उत्तर नहीं होना चाहिए । यह स्पष्ट रूप से "मेरे नए dataस्कीमा (वे publicएक ही डेटाबेस के भीतर स्कीमा में हैं )" में डिफ़ॉल्ट पोस्टगिस टेबल और विचार नहीं होने के बारे में पूछ रहे हैं । यह उत्तर उपयोगी है, और यह वही है जिसकी मुझे तलाश थी, लेकिन यह सीधे सवाल से संबंधित नहीं है ।
केनी एविट

20

जब आप किसी PostGIS डेटाबेस को स्थानिक रूप से सक्षम करते हैं, तो संबंधित फ़ंक्शन, SRS तालिका, और दृश्य को सार्वजनिक स्कीमा में रखा जाता है, जैसा कि आप राज्य करते हैं। इसका मतलब यह नहीं है कि सभी या आपके अपने स्थानिक तालिकाओं को एक ही सार्वजनिक स्कीमा में होना चाहिए। PostGIS अभी भी "नए" स्कीमा में सभी स्थानिक डेटा पर काम करेगा।

वास्तव में, मैं आमतौर पर अपने एप्लिकेशन-विशिष्ट तालिकाओं को एक अलग स्कीमा में रखता हूं। इस तरह, यदि आपको PostGIS के लिए एक प्रमुख संस्करण अपग्रेड करने की आवश्यकता है, तो आप अपने एप्लिकेशन-विशिष्ट टेबल बैकअप को रख सकते हैं और स्थानिक टूल को बदलने वाले से एक अलग प्रक्रिया के रूप में पुनर्स्थापित कर सकते हैं।

इसलिए, मुझे लगता है कि आप अच्छा कर रहे हैं। अंत में, यदि आपने पहले ही ऐसा नहीं किया है, तो नए स्कीमा को खोज पथ में जोड़ना एक अच्छा विचार है:

ALTER DATABASE my_db SET search_path = gc, public;


धन्यवाद मार्टिन। क्या इसका मतलब है कि मैं "सार्वजनिक" के अलावा एक कस्टम स्कीमा में तालिकाओं पर स्थानिक कार्यों का उपयोग करने में सक्षम हूं?
alextc

आप दूसरे स्कीमा में डेटा कैसे जोड़ते हैं, अर्थात। नहीं public? उदाहरण के साथ डेटा जोड़ना। shp2psqlकरने के लिए test.tableअभी भी में डेटा डालता है public?
knutole

@knutole। जैसा कि मैंने उल्लेख किया है कि मैंने ArcCatalog का उपयोग आयात / नई सुविधा वर्गों के लिए किया था। मुझे यकीन नहीं है कि अगर आप सार्वजनिक रूप से अन्य कस्टम स्कीमा में डेटा जोड़ने के लिए shp2psql का उपयोग कर सकते हैं।
एलेक्टेक

1
यह स्वीकृत उत्तर होना चाहिए।
केनी एविट

12
  1. स्कीमा के साथ आपके द्वारा बनाए जा सकने वाले संभावित संगठनात्मक रणनीतियों में से एक उपयोगकर्ता को एक स्कीमा में बड़े पैमाने पर चलाने की अनुमति देना है, लेकिन चीजों को दूसरे में बेईमानी करने में असमर्थ होना। तो अगर आप इस तरह से स्कीमा का उपयोग करना चाहते हैं, तो यह pgAdmin के विशेषाधिकार टैब में किया जा सकता है। लेकिन यह आवश्यक नहीं है कि आप ऐसा करें, इसलिए यदि आप एक से अधिक स्कीमाओं में समान विशेषाधिकार बनाए रखना चाहते हैं, तो यह ठीक है।

  2. आपके द्वारा लिंक किए गए लेखों के आधार पर, सब कुछ सार्वजनिक रखने के साथ समस्या यह है कि जब आप डेटा डंप करते हैं, तो आपको सिस्टम टेबल और रिश्तों को अपने डेटा के साथ मिलाने की संभावना होती है। यदि आप अपने सभी डेटा को एक नए स्कीमा में ले जाते हैं, तो आपको उस बारे में फिर से चिंता करने की आवश्यकता नहीं है।

  3. कोई परेशानी नहीं। (प्रमाण के लिए, ध्यान दें कि जब आप SRB तालिका को खोजना चाहते हैं तो आपको public.spatial_ref_sys निर्दिष्ट नहीं करना है।)


6

एक अतिरिक्त टिप (हो सकता है कि आप पहले ही इस पार आ गए हों)। आप संभवतः उपयोगकर्ता के डिफ़ॉल्ट search_path में "डेटा" स्कीमा जोड़ना चाहते हैं। कुछ इस तरह:

ALTER USER <your_user_name> SET search_path=public,data,$USER; 

अपनी बात 2 के संबंध में, कभी-कभी आपको पुनर्स्थापित करने की आवश्यकता होती है जब आपके पास मूल डीबी तक पहुंच नहीं होती है। (यह बैकअप के कारणों में से एक है ...) ताकि आपके पास अपने डेटा को एक अलग स्कीमा में स्थानांतरित करने का मौका न हो जब आपको वास्तव में इसकी आवश्यकता हो।


1

हम अस्थायी विश्लेषण / देव तालिका परिणामों के लिए सार्वजनिक स्कीमा का उपयोग करते हैं, फिर स्थायी उपयोग के लिए अधिक संगठित स्कीमा (फ़ोल्डर?) में जाते हैं।

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