在 postgres 中导出为 CSV 并使用 GZIP 压缩
我需要将一个大表导出到 csv 文件并压缩它。
我可以使用 postgres 中的 COPY 命令将其导出,例如 -
COPY foo_table to '/tmp/foo_table.csv' delimiters',' CSV HEADER;
然后可以使用 gzip 对其进行压缩,例如 -
gzip - c foo_table.csv > >这种
方法的问题是,在获得最终的压缩文件之前,我需要创建这个中间 csv 文件,该文件本身很大。
有没有一种方法可以导出csv表格并一步压缩文件?
问候, 苏吉特
I need to export a big table to csv file and compress it.
I can export it using COPY command from postgres like -
COPY foo_table to '/tmp/foo_table.csv' delimiters',' CSV HEADER;
And then can compress it using gzip like -
gzip -c foo_table.csv > foo.gz
The problem with this approach is, I need to create this intermediate csv file, which itself is huge, before I get my final compressed file.
Is there a way of export table in csv and compressing the file in one step?
Regards,
Sujit
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
诀窍是让 COPY 将其输出发送到 stdout,然后通过 gzip 传输输出:
The trick is to make
COPY
send its output to stdout, then pipe the output through gzip:您可以根据文档直接使用 https://www.postgresql.org/文档/9.4/sql-copy.html
You can use directly, as per docs, https://www.postgresql.org/docs/9.4/sql-copy.html
下面对 @Joey 的答案进行了一些扩展,添加了对 手册。
如果你的表名中有大写字母(你有祸了),你需要在表名前后添加
\"
。我添加的第二件事是列列表。
另请注意文档:
Expanding a bit on @Joey's answer, below adds support for a couple more features available in the manual.
If you have capital letters in your table name (woe be onto you), you need the
\"
before and after the table name.The second thing I've added is column listing.
Also note from the docs:
PostgreSQL 13.4
psql
命令\copy
还可以与SELECT column_1、column_2、...
和时间戳结合使用>date +"%Y-%m-%d_%H%M%S"
用于文件名转储。PostgreSQL 13.4
psql
command\copy
also works combined withSELECT column_1, column_2, ...
and timestampdate +"%Y-%m-%d_%H%M%S"
for filename dump.