2010-10-20 13 views
20

Büyük bir tabloyu csv dosyasına vermem ve sıkıştırmam gerekiyor.CSV'ye dışa aktarma ve postgres'te GZIP ile sıkıştırma

ben gibi Postgres'e gelen KOPYA komutunu kullanarak dışa aktarabilirsiniz -

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

Sonra gibi gzip kullanarak sıkıştırabiliriz -

gzip -c foo_table.csv > foo.gz

bu yaklaşımla sorun ben Son sıkıştırılmış dosyamı almadan önce, kendisi büyük olan bu ara csv dosyasını oluşturmamız gerekiyor.

Csv'de bir dışa aktarma tablosu var mı ve dosyayı tek adımda mı sıkıştırıyorsunuz?

Selamlar, Sujit

hüner COPY ardından boru çıkış gzip ile Stdout'a çıkışını göndermek yapmaktır
+0

mutlaka CSV olmak zorunda değilse, sen gibi pg_dump kullanabilirsiniz: -Z 5' –

cevap

37

:

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

mükemmel 'pg_dump işe yaradı! – Sujit

+2

daha hızlı sıkıştırma için gzip yerine pigz (multithreaded gzip) kullanabilir. Genellikle gzip bottlneck. – sivann

5

@ Joey'in Yanıta biraz genişletilmesi, aşağıda için destek ekler the manual'da bir kaç özellik daha mevcut. Eğer tablo adı büyük harf varsa

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

(vah senin üzerinde olması), daha önce ve tablo adından sonra \" gerekir.

Eklediğim ikinci şey, sütun listesidir.

Ayrıca dokümanlardan not: tüm veriler istemci/sunucu bağlantısı üzerinden geçmelidir çünkü

Bu işlem, SQL KOPYA komutu kadar etkili değildir. Büyük miktarda veri için SQL komutu tercih edilebilir.