12

पर कॉलम ड्रॉप करना, इसलिए मेरे पास एक बड़े डेटासेट के साथ एक टेबल है और इस तालिका में तीन कॉलम हैं जिन्हें मैं छोड़ना चाहता हूं।
सवाल यह है कि पोस्टग्रेस इसके साथ कैसे निपटेंगे?पोस्टग्रेस में बड़े डेटासेट

क्या यह प्रत्येक प्रविष्टि के माध्यम से चलता है या क्या यह बिना किसी ओवरहेड के मैपिंग जानकारी अपडेट करेगा? क्या मैं सिर्फ ALTER TABLE बना सकता हूं या क्या मुझे इस विशेष मामले में स्वैप-टेबल का उपयोग करना चाहिए?

और, यदि यह कोई फर्क पड़ता है, तो सभी तीन कॉलमों की लंबाई तय होती है (दो पूर्णांक और एक संख्यात्मक)।

मैं अगर यह पहले से ही कहा गया है माफी चाहता हूँ, लेकिन Google किसी संबंधित प्रश्नों/लेख नहीं खोज सके ...

उत्तर

20

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

16

गूगल इस प्रश्न के लिए बेकार हो सकता है, लेकिन the manual rarely fails:

DROP COLUMN प्रपत्र शारीरिक रूप से स्तंभ को दूर नहीं करता है, लेकिन बस इसे एसक्यूएल संचालन के लिए अदृश्य बनाता है। बाद में सम्मिलित करें और तालिका में अद्यतन संचालन कॉलम के लिए एक शून्य मान संग्रहीत करेगा। इस प्रकार, कॉलम छोड़ना त्वरित है लेकिन यह को आपकी तालिका के ऑन-डिस्क आकार को तुरंत कम नहीं करेगा, क्योंकि कॉलम पर कब्जा कर लिया गया स्थान पुनः दावा नहीं किया गया है। अंतरिक्ष को समय के साथ पुनः प्राप्त किया जाएगा क्योंकि मौजूदा पंक्तियां अपडेट की गई हैं।

और:

तालिका इसके बारे में तुरंत फिर से लिखने के लिए मजबूर करने के लिए, आप वैक्यूम पूर्ण, क्लस्टर या ALTER तालिका कि एक पुनर्लेखन बलों के तरीकों में से एक का उपयोग कर सकते हैं। यह तालिका में कोई अर्थात् दृश्यमान परिवर्तन नहीं होता है, लेकिन से अधिक उपयोगी डेटा के छुटकारा पाता है।

विशेष रूप से, प्रणाली सूची तालिका pg_attribute में स्तंभ attisdroppedTRUE को तैयार है।

+2

दिलचस्प बात यह है कि पंक्ति अपडेट अब गिराए गए कॉलम में NULLs को "स्टोर" करेंगे। और क्योंकि postgresql वैकल्पिक "शून्य बिटमैप" में थोड़ा सा सेट करके नल स्टोर करता है, _every_ पंक्ति में अब एक शून्य बिटमैप (प्रत्येक आठ गिराए गए या गैर-गिराए गए कॉलम के लिए एक बाइट का आकार होना चाहिए) भले ही दृश्यमान पंक्तियों में से कोई भी न हो शून्य –

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