PostGIS तालिका का नाम बदलें और GeoServer को अपडेट करें?


9

मैं अपनी एक पोस्टगिस टेबल का नाम बदलना चाहता हूं। हालांकि, जब मैं एक साधारण आवेदन करके ऐसा करता हूं

ALTER TABLE old_name RENAME TO new_name;

स्थानिक डेटा, जैसा कि मैं इसे समझता हूं, नए नाम के साथ अपडेट नहीं किया गया है। सबसे पहले, इन संदर्भों को फ़ंक्शन चलाकर ठीक किया जा सकता है:

SELECT probe_geometry_columns()

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

जवाबों:


4

तालिका का नाम बदलने के लिए आपको दो स्थानों के मेटाडेटा में नाम बदलना होगा। सबसे पहले PostGIS पर, फिर जियोसर्वर कॉन्फिगरेशन पर।

PostGIS को बदलने के लिए, आप सीधे ज्यामिति_columns को अपडेट कर सकते हैं। यद्यपि जांच_जैमित्री में उस प्रविष्टि को ज्यामिति स्तंभों में सम्मिलित करने का प्रभाव होगा, लेकिन इसमें सभी अनुपलब्ध ज्यामिति स्तंभ प्रविष्टियों को सम्मिलित करने वाले सभी तालिकाओं के स्कीमा को हटाने का प्रभाव भी होगा। यदि आपके पास बहुत सी मेजें हैं, तो यह महंगी हो सकती है, इसलिए सीधे ज्यामिति_कोल्यूम तालिका को सीधे अपडेट क्यों न करें?

जियोसर्वर को अपडेट करने के लिए आपके पास विभिन्न विकल्प हैं। निश्चित रूप से आप इसे जीयूआई के माध्यम से मैन्युअल रूप से कर सकते हैं, लेकिन मुझे लगता है कि आप इसे स्वचालित करना चाहते हैं। एक शेल स्क्रिप्ट लिखना जो जियोसर्वर इंस्टॉलेशन फोल्डर में कॉन्फिग फाइलों को एडिट करता है और जियोसर्वर को रीस्टार्ट करता है, लेकिन वह काम करने का लंबा तरीका भी है। मैं आपको जियोसर्वर REST कॉन्फिग API का उपयोग करने की सलाह दूंगा जो आपको RESTful कॉल्स के माध्यम से लेयर कॉन्फिगरेशन में हेरफेर करने की अनुमति देता है ।

अपडेट करें:

यदि "अपडेट ज्योमेट्री कॉलम" स्पष्ट नहीं है, तो निम्न कार्य करें:

UPDATE geometry_columns set f_table_name = 'my_new_table_name' where f_table_name = 'my_old_table_name';

अपडेट 8 साल (!!!) बाद में (2018):

पोस्टगिस 2.0 के बाद, नीचे दिए गए कुछ लोगों की तरह, मेटाडेटा तालिकाएँ ALTER स्टेटमेंट के बाद अपने आप अपडेट हो जाती हैं।


मेरी अज्ञानता को क्षमा करें, लेकिन जैसा कि मैं PostGIS के लिए बहुत नया हूं। मैं वास्तव में ज्योमेट्री_कैल्यूम कैसे अपडेट करूं? क्या मैंने आपको सही समझा है कि जांच_ फ़ंक्शन (बिना किसी पैरामीटर के) चलाने से एक ही काम होता है?
मिमो

1
Probe_geometry_columns से कार्यान्वयन पर देखो trac.osgeo.org/postgis/changeset/7548 यह यदि आवश्यक प्रविष्टि मौजूद नहीं है, DB में हर एक मेज के माध्यम से जा अगर स्कीमा स्ट्रिंग "geometrytype" है खोजने और डालने एक नया रिकार्ड है जियोमेट्री_कोल्यूम में। फिर भी, अनाथ रिकॉर्ड को छोड़ दिया जाता है जैसे वे हैं। तो बस क्यों न करें: UPDATE geometry_columns SET f_table_name = 'new_table_name' जहाँ f_table_name = 'old_table_name'
Ragi Yaser Burhum

यह दिखाता हैNot Found The requested URL /latest/en/user/restconfig/rest-config-api.html was not found on this server.
Scaramouche

अब आप इसे देखना चाहते हैं: docs.geoserver.org/stable/en/user/rest/api/index.html
रागी यासर बुरहुम

7

ध्यान दें कि PostGIS 2.0+ में, आपको बस सामान्य काम करना है

ALTER TABLE old_name RENAME TO new_name;

ज्योमेट्री_कॉम्बल्स व्यू (या भूगोल_कोश) में प्रवेश को भी अपडेट किया जाएगा।


3
SELECT Probe_Geometry_Columns();

एक उपयोगी उपयोगिता है।

सबसे पहले, जब हम एक मौजूदा तालिका के साथ एक ज्यामिति स्तंभ संलग्न करते हैं

SELECT AddGeometryColumn('my_table', 'geo_column', 1234, 'MULTIPOINT', 2);

हम फ़ंक्शन को वह सब कुछ खिला रहे हैं जो टाइप टेबल (my_table) के लिए ज्यामिति (geo_column) के कॉलम से निपटने के लिए है और SRID (1234), ज्यामिति प्रकार (MULTIPOINT) और आयामों की संख्या (2) जैसे महत्वपूर्ण विवरण लिखें। ज्योमेट्री_कोल्यूम टेबल। संक्षेप में, यह एक परिवर्तन और तीन अद्यतन है।

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

जांच फ़ंक्शन को कॉल करना, ज्यामिति_ कॉलमों के नए मूल्यों को जोड़ने और संघर्षों की रिपोर्टिंग करने के लिए, टाइप ज्यामिति के प्रत्येक कॉलम की जांच करता है।

यदि आपका नाम जियोमेट्री_कैल्यूम में नहीं बदला है, तो आपके प्रश्न के पीछे घूमते हुए, जियोसेवर का मानना ​​है कि पुनर्नामित तालिका में स्थानिक डेटा नहीं है। विचार करने के लिए कुछ और है कि जांच फ़ंक्शन नए तालिका नाम को दर्शाते हुए एक डुप्लिकेट रिकॉर्ड बनाता है लेकिन मूल रिकॉर्ड से छुटकारा नहीं मिलता है - जियोसेवर के लिए एक और संभावित हैंग-अप।

सभी ने कहा, मैं आपको सुझाव दूंगा: 1) जांच चलाएं और फिर पुराने रिकॉर्ड को तुरंत हटा दें; या 2) f_table_name मान को बदलने के लिए अपना नाम परिवर्तन ज्योमेट्री_कैल्यूम पर ALTER के साथ करें।

शब्दशीलता के लिए क्षमा करें, लेकिन मुझे आशा है कि यह मदद करता है।


आपके जवाब के लिए धन्यवाद। मैं अब बेहतर postGIS समझ शुरू कर रहा हूँ। फिर भी, मैं आवश्यक कदमों के बारे में थोड़ा अनिश्चित हूं, जिन्हें लेने की आवश्यकता है। क्या मुझे सबसे पहले नाम परिवर्तन करना चाहिए, फिर जांच ()? मैं ज्यामिति_ कॉलम को कैसे बदल सकता हूं?
मिमो

ज्योमेट्री_कैल्यूम में बदलाव करने का सबसे सरल तरीका है pgAdmin को खोलना, टेबल पर राइट क्लिक करना, डेटा का चयन करना, सभी पंक्तियों का चयन करना, पुरानी तालिका के नाम वाली सेल में क्लिक करना और नया टेबल नाम टाइप करना। या, UPDATE geometry_columns SET f_table_name = 'new_table_name' WHERE f_schema_name = 'schema_name' और f_table_name = 'old_table_name'
rec.thegeom

1

मुझे यकीन नहीं है कि SELECT check_geometry_columns () क्या करता है, लेकिन आप आसानी से देख सकते हैं कि अगर आपका नया टेबल नेम है या यह अभी भी पुराने की ओर इशारा कर रहा है तो यह देखने के लिए ज्योमेट्री_कोल्यूम टेबल की जांच कर सकते हैं।

मुझे संदेह है कि आपको परिवर्तनों को "नोटिस" करने के लिए जियोस्वर स्टोर को पुनः लोड करने की आवश्यकता है। वैकल्पिक रूप से एक स्टॉप और स्टार्ट यह करेगा।


"जियोसर्वर स्टोर को फिर से लोड करने" से आपका क्या मतलब है?
मिमो

स्थिति पृष्ठ ( docs.geoserver.org/latest/en/user/webadmin/server/status.html ) पर एक पुनः लोड बटन है।
इयान Turton

धन्यवाद। हालाँकि, रीलोड काम नहीं किया। मुझे अभी भी एक जियोसर्वर त्रुटि मिलती है जो नामांकित परत को नहीं खोजने के बारे में शिकायत करती है। यह अभी भी पुराने नाम के तहत इसे खोजने की कोशिश करता है।
मिमो

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