我需要将一个大表导出到csv文件并压缩它。
我可以使用来自postgres的COPY命令导出它,例如 -
COPY foo_table to '/tmp/foo_table.csv' delimiters',' CSV HEADER;
然后可以使用gzip压缩它 -
gzip -c foo_table.csv > foo.gz
这种方法的问题是,在得到最终的压缩文件之前,我需要创建这个中间的csv文件,它本身就很庞大。
csv中是否有导出表的方法并一步压缩文件?
此致 Sujit
答案 0 :(得分:44)
诀窍是让COPY
将其输出发送到stdout,然后通过gzip管道输出:
psql -c "COPY foo_table TO stdout DELIMITER ',' CSV HEADER" \
| gzip > foo_table.csv.gz
答案 1 :(得分:6)
对@ Joey的回答进行了扩展,下面增加了对the manual中可用的更多功能的支持。
psql -c "COPY \"Foo_table\" (column1, column2) TO stdout DELIMITER ',' CSV HEADER" \
| gzip > foo_table.csv.gz
如果你的表名中有大写字母(祸害就在你身上),你需要在表名之前和之后加\"
。
我添加的第二件事是列列表。
另请注意文档:
此操作不如SQL COPY命令有效,因为所有数据都必须通过客户端/服务器连接。对于大量数据,可能更喜欢SQL命令。
答案 2 :(得分:0)
根据文档,您可以直接使用https://www.postgresql.org/docs/9.4/sql-copy.html
COPY foo_table to PROGRAM 'gzip > /tmp/foo_table.csv' delimiters',' CSV HEADER;