क्या PostgreSQL में एक इंडेक्स के लिए निर्माण स्टेटमेंट दिखाने का एक तरीका है


14

मुझे PostgreSQL में एक इंडेक्स को फिर से बनाने की जरूरत है जिसे इंडेक्स ब्लोट का सामना करना पड़ा है। चूँकि इसे बनाते समय सूचकांक को प्रयोग करने योग्य बनाने की आवश्यकता होती है, इसलिए मैं REINDEX का उपयोग नहीं कर सकता। मैं एक नए नाम के साथ सूचकांक को फिर से बनाने जा रहा हूं और फिर पुराने को छोड़ दूंगा। क्या एसक्यूएल स्टेटमेंट को देखने के लिए कोई तरीका है जो एक इंडेक्स बनाने के लिए इस्तेमाल किया गया था, इसलिए मैं बस इसे कॉपी कर सकता हूं?



1
कमांड में जोड़ने के CONCURRENTLYलिए याद रखें CREATE INDEX, ताकि आप टेबल पर एक विशेष ताला न लगाएं।
क्रेग रिंगर

जवाबों:


26

वास्तव में, pg_indexesसिस्टम कैटलॉग दृश्य को केवल निम्नानुसार क्वेरी करें :

SELECT indexdef FROM pg_indexes WHERE indexname = '...'

और आपको इसे परिभाषित करने के लिए उपयोग किए गए SQL कथन को वापस लेना चाहिए।


4
ध्यान दें कि सूचकांक नाम केवल स्कीमा प्रति अद्वितीय हैं । आप जोड़ना चाह सकते हैं AND schemaname = 'myschema'
एरविन ब्रान्डस्टेट्टर

0

हाँ, सिस्टम कैटलॉग में अनुक्रमणिका को फिर से बनाने के लिए पूर्ण SQL कथन है। मेरे द्वारा सबसे आसान तरीका pg_dump / pg_restore का उपयोग किया जा सकता है:

$ pg_dump -F c | pg_restore -I <your_index_name>

4
यदि डेटाबेस बड़ा है, तो यह एक ओवरकिल हो सकता है :) आप -sडेटा को बाहर करने के लिए जोड़ना चाह सकते हैं और, यदि ज्ञात हो, तो तालिका का नाम -t
dezso


-1

indexdefअभी भी आंशिक सूचकांक के मामले में निर्माण कथन के समान नहीं है। उदाहरण के लिए यदि हम निम्नलिखित कथन के साथ एक सूचकांक बनाते हैं: CREATE INDEX item_orgunit_idx ON items (orgunit_id) WHERE type IN ('invoice', 'purchaseorder', 'beanpayment');

पोस्टग्रैड्स निम्नलिखित अनुक्रमणिका उत्पन्न करेंगे: CREATE INDEX item_orgunit_idx ON public.items USING btree (orgunit_id) WHERE ((type)::text = ANY ((ARRAY['invoice'::character varying, 'purchaseorder'::character varying, 'beanpayment'::character varying])::text[]))

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


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