在postgres中导出为CSV并使用GZIP压缩

时间:2010-10-20 19:51:15

标签: postgresql backup gzip compression

我需要将一个大表导出到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

3 个答案:

答案 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;