पोस्टबीस डीबी में मौजूदा तालिकाओं (नया स्कीमा लागू करने) से एक तालिका कैसे बनाएं?


9

मेरे पास एक तालिका है जो भू-स्थानिक रूप से सक्षम है; जिसमें विश्व की सीमाएँ हैं। मैं इसे अलग-अलग स्कीमा (वैश्विक, यूरोप आदि) में तोड़ना चाहता हूं। मेरा विचार है कि इस तरह दिखने वाली चीज़ का उपयोग करना है:

CREATE TABLE europe.borders
  AS (SELECT *
         FROM wo_borders
         WHERE admin_lvl2='eu' ); //just an example!

नई स्कीमा लेने और उन्हें भू-स्थानिक रूप से सक्षम बनाने के लिए मौजूदा तालिकाओं से तालिकाओं को बनाने का क्या सही है? क्या मुझे अपनी डिफ़ॉल्ट पोस्टगिस टेम्पलेट का उपयोग करके नई तालिकाएँ पहले से बनानी होंगी?

जवाबों:


21

आम तौर पर आप इस तरह से एक नई भू-स्थानिक तालिका बना सकते हैं:

SELECT *
INTO europe.borders
FROM wo_borders
WHERE admin_lvl2 = 'eu';

-- Define a primary key
ALTER TABLE europe.borders ADD PRIMARY KEY (gid);

-- Spatially enable it
SELECT Populate_Geometry_Columns('europe.borders'::regclass);

हालाँकि, ऐसा करने से आप अपने डेटाबेस को अलग कर रहे हैं (इसे सामान्य नहीं कर रहे हैं)। इसका मतलब है कि इसमें अतिरेक है, इसलिए यदि किसी तालिका में किसी जानकारी के लिए अपडेट है, तो दूसरे में अपडेट करना मुश्किल है। इसके अलावा, आप पूरी दुनिया के सवालों पर प्रदर्शन नहीं कर पाएंगे। आप मुख्य तालिका के विभाजन के वर्चुअल टेबल बनाने के लिए VIEW का उपयोग करने पर विचार कर सकते हैं:

-- Make an index on your column used to query the view
CREATE INDEX wo_borders_admin_lvl2_idx ON wo_borders USING btree (admin_lvl2);

-- Now the view
CREATE OR REPLACE VIEW europe.borders_view AS
 SELECT *
 FROM wo_borders
 WHERE admin_lvl2 = 'eu';

-- Spatially enable it
SELECT Populate_Geometry_Columns('europe.borders_view'::regclass);

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