विशाल पोस्टग्रैज टेबल की नकल कैसे करें?


29

मेरे पास विशाल पोस्टग्रैज टेबल (10GB डेटा - 160M रिकॉर्ड) है। तालिका स्थिर है और उस पर कोई लिखित कार्रवाई नहीं की गई है। मैं इसे डुप्लिकेट करना चाहता हूं, लिखना चाहता हूं, इसे फिर से लिखना और फिर एकल तेज़ लेनदेन के साथ पुराने को हटा दें और नए को मूल नाम में बदल दें।

ऐसी विशाल तालिका को डुप्लिकेट करने का सबसे तेज़ तरीका क्या है?

जवाबों:


55

आम तौर पर किसी तालिका को डुप्लिकेट करने का सबसे तेज़ तरीका बस है:

CREATE TABLE table2 AS SELECT * FROM table1;

समानांतर INSERT तेजी से हो सकते हैं, लेकिन केवल बहुत तेज डिस्क सबसिस्टम (जब कई ड्राइव पर डेटा को इंटरलेय किया जाता है) के साथ। अन्यथा यह धीमा हो जाएगा।

एक बार जब आप संशोधन table2कर लेते हैं, तो यह नया नाम ले सकता है:

BEGIN;
DROP TABLE table1;
ALTER TABLE table2 RENAME TO table1;
COMMIT;

DROP TABLEआदेश है जो एक तरह से आप की आशा कर सकते हैं में समवर्ती पाठकों को प्रभावित करता है एक विशेष ताला, की जरूरत है:

  • DROP अन्य लेनदेन से खत्म करने के लिए मेज पर किसी भी लंबित पढ़ने का इंतजार करेंगे।
  • इस बीच में उस तालिका को पढ़ने का प्रयास करने वाले किसी भी नए लेन-देन को प्रतीक्षा में रखा जाएगा, और तब विफल हो जाएगा क्योंकि मूल table1अब मौजूद नहीं है। त्रुटि कैसा दिखेगा "कर सकता OID साथ नहीं खुला संबंध OID "

दूसरी समस्या से बचने के लिए, आप का नाम बदलने सकता है table1 करने के लिए old_table1 यह छोड़ने के बजाय, और उसके बाद ही बाद में लेन-देन, के बाहर छोड़ जब इन पाठकों इसके साथ किया जाता है। तो ऊपर का क्रम बन जाएगा:

BEGIN;
ALTER TABLE table1 RENAME TO old_table1;
ALTER TABLE table2 RENAME TO table1;
COMMIT;
...
DROP TABLE old_table1;

2
धन्यवाद दोस्त। यह ठीक उसी तरह का स्पष्टीकरण है जिसकी मैं खोज कर रहा था। एक बार फिर धन्यवाद!
मिल्वान ज़ोगोविच

यदि तालिका 2 पर अनुक्रमित परिभाषित किए गए हैं, तो क्या तालिका का नाम बदलने के बाद भी वे काम करेंगे?
BAMPookie

1
@BamaPookie ने इसे पूर्ण स्कीमा के लिए अनुक्रमित, अड़चनों और चूक सहित wiki.postgresql.org/wiki/Clone_schema
टिमोथी वोगेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.