मैं स्पैटियालाइट डीबी में एक तालिका का ठीक से नाम कैसे ले सकता हूं?


11

स्पैटियालाइट में स्थानिक परतों (तालिकाओं) में विभिन्न सहायक वस्तुएं और मेटाडेटा शामिल हैं, जिसमें ट्रिगर्स, सूचकांकों और न्यूनतम (कम से कम) geometry_columnsतालिका में प्रविष्टियां शामिल हैं । मैं (अधिमानतः) एक जीयूआई की तलाश कर रहा हूं जो सभी आवश्यक बदलावों को एक ही बार में संभाल लेगा, या सभी आवश्यक परिवर्तनों के दस्तावेज़ीकरण को बदल देगा ताकि स्थानिक परतों को न तोड़ा जा सके।

टेबल्स हैं:

  1. में प्रवेश geometry_columns.f_table_name
  2. पांच ट्रिगर नाम [prefix]_[table_name]_geometry, जहां उपसर्ग इंगित करता है कि क्या यह एक लेन-देन रोलबैक या इंडेक्स अपडेट है।
  3. नामित तीन स्थानिक सूचकांक idx_[table_name]_geometry[_suffix]

मैंने QGIS DB प्रबंधक और स्पैटियालाइट-GUI, दो अनुप्रयोगों में यह कोशिश की है।

QGIS DB प्रबंधक के निम्नलिखित प्रभाव दिखाई देते हैं:

  1. geometry_columnsनए तालिका नाम के साथ सही अपडेट
  2. ट्रिगर का नाम नहीं बदलता है। ट्रिगर परिभाषा को आंशिक रूप से संशोधित किया गया है ताकि BEFORE [INSERT|UPDATE|DELETE]नए तालिका नाम को संदर्भित किया जाए , लेकिन स्थिति अभी भी पुराने नाम की खोज करती है geometry_columns
  3. स्थानिक सूचकांकों का नाम नहीं लेता है। सुनिश्चित नहीं है कि यह मायने रखता है क्योंकि ट्रिगर अभी भी पुराने सूचकांक नामों का उल्लेख करते हैं।

जब आप रखरखाव → स्पैटियालाइट-जीयूआई में तालिका का नाम बदलते हैं, तो आपको सिर्फ SQL ALTER TABLEस्टेटमेंट का स्टब मिलता है । यह सीधा SQL है और QGIS DB प्रबंधक से भी कम है। यदि आप नए तालिका नाम को भरते हैं, तो तालिका का नाम बदल जाता है। अन्य प्रभाव:

  1. तालिका का नाम नहीं बदला गया है geometry_columns.f_table_name, जिसका अर्थ है कि कई जीआईएस तालिका को स्थानिक परत के रूप में नहीं देखेंगे।
  2. ट्रिगर का नाम नहीं बदलता है। ट्रिगर परिभाषा को आंशिक रूप से संशोधित किया गया है ताकि BEFORE [INSERT|UPDATE|DELETE]नए तालिका नाम को संदर्भित किया जाए , लेकिन स्थिति अभी भी पुराने नाम की खोज करती है geometry_columns
  3. स्थानिक सूचकांकों का नाम नहीं लेता है। सुनिश्चित नहीं है कि यह मायने रखता है क्योंकि ट्रिगर अभी भी पुराने सूचकांक नामों का उल्लेख करते हैं।

ध्यान दें कि स्पेसियल-जीयूआई एक ज्यामिति कॉलम को पुनर्प्राप्त करने का विकल्प देता है जो सही प्रविष्टि जोड़ता है geometry_columns(लेकिन आपको एसआरआईडी, ज्यामिति प्रकार और आयामों को निर्दिष्ट करने की आवश्यकता होती है), एक स्थानिक सूचकांक के निर्माण या पुनर्निर्माण के लिए, और चार्जर को पुनर्प्राप्त करने के लिए, लेकिन कोई नहीं इन कार्यों में पुरानी तालिका पंक्तियों, ट्रिगर्स या सूचकांकों को हटा दिया जाता है, जिससे इसमें बहुत अधिक (संभवतः हानिरहित लेकिन कष्टप्रद) schmutz के साथ एक DB हो जाता है।


3
मुझे लगता है कि अगर हम कभी भी आकार की फ़ाइलों से छुटकारा पाना चाहते हैं, तो स्पैटियालाइट में फ़ील्ड्स को फिर से व्यवस्थित करने, नाम बदलने, हटाने आदि के लिए "टेबल मैनेजर" की बहुत आवश्यकता है। लेकिन, अज्ञात कारणों के लिए, ऐसा कोई उपकरण नहीं है जो हमें उस के साथ मदद करेगा, जहां तक ​​मुझे पता है। हो सकता है कि क्राउड फंडिंग पहल के लिए एक अच्छा प्रोजेक्ट हो!
बर्ड वी।

आपके पास स्थानिक-गुई का कौन सा संस्करण है?
user30184

स्पैटियालाइट-जीयूआई 1.7.1।
ली हैचोरियन

जवाबों:


2

जब आप डेटा की प्रतिलिपि बना रहे हों तो आपको तालिका को एक नए तालिका नाम के साथ कॉपी करना होगा और कॉलम का नाम बदलना होगा। एक टेबल मैनेजर फंक्शन इसके लिए आदर्श होगा लेकिन अभी तक इसके लिए नहीं बनाया गया है। नीचे दिया गया लिंक SQLite में नमूना कोड के साथ इसके लिए कुछ औपचारिक जानकारी दिखाता है। SpatiaLite SQLite का एक हिस्सा है इसलिए कोडिंग समान है। सौभाग्य!

https://blog.xojo.com/2013/12/04/renaming-columns-in-sqlite-tables/


ध्यान दें कि सवाल टेबल्स का नाम बदलने का है , कॉलम का नहीं । लिंक्ड पेज ALTER TABLEस्टेटमेंट पर चर्चा करता है, लेकिन सवाल पहले से ही पता है कि यह एक स्थानिक डेटाबेस के लिए अपर्याप्त क्यों है।
ली हैचेरियन जूल

आपकी टिप्पणी को ध्यान में रखते हुए, इसे आगे देखने के बाद, मुझे नहीं लगता कि ऐसा करने का एक पर्याप्त तरीका है और ट्रिगर्स और अन्य संरचनात्मक घटकों को बनाए रखना है। ऐसा लगता है कि आपको कोड को फिर से लिखना होगा या जब आप तालिका निर्यात करने के लिए जाएंगे (यदि आप ऐसा करने की योजना बनाते हैं), तो QGIS में db प्रबंधक में एक अलग नाम का उपयोग करें।
जूलिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.