2014-09-21 2 views
5

मैंने सप्ताह में एक बार हमारे पीजी डेटाबेस को पुन: स्थापित करने के लिए एक सरल लिपि लिखी है। (-> बनाने खंड सूचकांक नाम) शुद्ध एसक्यूएल में मौजूदा इंडेक्स के लिए पूर्ण CREATE INDEX खंड कैसे प्राप्त करें?

  • अगर वहाँ कोई भी है - करने के लिए लॉग इन करें

    • फूला हुआ बाइट्स की मात्रा
    • देखने hashmap चर से सूचकांक खंड बनाने के द्वारा शीर्ष 10 सूचकांक मिल: यह एक सरल तर्क है stderr और अगले अनुक्रमणिका पर जाने
  • नया सूचकांक बनाने के साथ-साथ
  • ड्रॉप पुराने सूचकांक समवर्ती
  • नया नाम बदलने इंडेक्स

और उचित आलसी डेवलपर होने के नाते मैं इस अवधारणा को नापसंद करता हूं कि मुझे लगातार अपने हैशप को अपडेट करना होगा। (दूसरी तरफ, मुझे ऐसा करने के दौरान दो अक्षम गुण मिल गए हैं।)

pg_index काफी जानकारीपूर्ण प्रतीत होता है, क्या इसका निर्माण सूचकांक खंड पुनर्निर्माण करने का कोई तरीका है?

कॉलम सूची प्राप्त करना आसान है, लेकिन हम अलग-अलग इंडेक्स प्रकार, फ़ील्ड के लिए अलग-अलग opclasses, आंशिक सूचकांक का उपयोग करते हैं ... और कौन जानता है। यह सुनिश्चित करना महत्वपूर्ण है कि हमें वही क्लॉज मिलेगा जिसका उपयोग पहली बार इंडेक्स बनाने के लिए किया गया था।

उत्तर

9

हाँ, उद्देश्य के लिए एक अंतर्निहित फ़ंक्शन pg_get_indexdef है।

उदा .:

regress=> SELECT pg_get_indexdef('demo_pkey'::regclass); 
        pg_get_indexdef      
-------------------------------------------------------- 
CREATE UNIQUE INDEX demo_pkey ON demo USING btree (id) 
(1 row) 
+0

यह वास्तव में एक शर्म की बात है वहाँ एक मेज की परिभाषा के लिए एक बराबर कार्यों नहीं है कि ('pg_get_tabledef()' वास्तव में उपयोगी होगा) –

+0

@a_horse_with_no_name हाँ, मैं सहमत हूँ। बेहद दृढ़ता से। मैं क्लाइंट साइड टूल 'pg_dump' बनाने के साथ तर्क (पुनः डाउनग्रेड) को समझता हूं, लेकिन एक विकल्प के रूप में सर्वर पक्ष डीडीएल निर्यात की कमी बहुत निराशाजनक है। –

+0

वाह! बहुत खुशी है कि यह वास्तव में मौजूद है। यहां तक ​​कि इस फ़ंक्शन विवरण को जानने के लिए भी मैं इसे आसानी से Google नहीं कर सकता :) – skaurus

संबंधित मुद्दे