2010-10-20 4 views
20

मुझे सीएसवी फ़ाइल में एक बड़ी तालिका निर्यात करने और इसे संपीड़ित करने की आवश्यकता है।सीएसवी में निर्यात करें और पोस्टग्रेज़ में जीजेपीआईपी के साथ संपीड़न

मैं की तरह postgres से कॉपी आदेश उपयोग करके उसका निर्यात कर सकते हैं -

COPY foo_table to '/tmp/foo_table.csv' delimiters',' CSV HEADER;

और फिर जैसे gzip का उपयोग कर इसे सेक कर सकते हैं -

gzip -c foo_table.csv > foo.gz

इस दृष्टिकोण के साथ समस्या यह है, मैं मुझे अपनी अंतिम संपीड़ित फ़ाइल प्राप्त करने से पहले, इस इंटरमीडिएट सीएसवी फ़ाइल को बनाने की आवश्यकता है, जो स्वयं विशाल है।

क्या सीएसवी में निर्यात तालिका का एक तरीका है और फ़ाइल को एक चरण में संपीड़ित करना है?

सादर, सुजीत

+0

यदि यह आवश्यक रूप से सीएसवी होना आवश्यक नहीं है, तो आप pg_dump का उपयोग कर सकते हैं, जैसे: 'pg_dump -Z 5' –

उत्तर

37

चाल COPY, gzip के माध्यम से तो पाइप उत्पादन stdout के लिए इसके उत्पादन भेज बनाने के लिए है:

psql -c "COPY foo_table TO stdout DELIMITER ',' CSV HEADER" \ 
    | gzip > foo_table.csv.gz 
+0

सही, यह काम करता है! – Sujit

+2

तेजी से संपीड़न के लिए gzip के बजाय पिगज़ (बहुप्रचारित gzip) का उपयोग कर सकता है। आमतौर पर gzip बोतल है। – sivann

5

@ जॉय के जवाब पर थोड़ा विस्तार, नीचे के लिए समर्थन जोड़ता the manual में कुछ और सुविधाएं उपलब्ध हैं।

psql -c "COPY \"Foo_table\" (column1, column2) TO stdout DELIMITER ',' CSV HEADER" \ 
    | gzip > foo_table.csv.gz 

आप अपनी तालिका नाम बड़े अक्षरों में है (हाय आप पर हो), तो आपको पहले और तालिका नाम के बाद \" की जरूरत है।

दूसरी चीज़ जो मैंने जोड़ दी है वह कॉलम सूची है।

इसके अलावा डॉक्स से ध्यान दें:

इस आपरेशन एसक्यूएल कॉपी आदेश के रूप में के रूप में कुशल क्योंकि सभी डेटा क्लाइंट/सर्वर कनेक्शन के माध्यम से गुजरना होगा नहीं है। बड़ी मात्रा में डेटा के लिए SQL कमांड बेहतर हो सकता है।

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