您好 我想将一个postgres表转储到csv。该数据库是我正在工作的(Linux)机器的本地数据库。
psql dev -U myusername -c "select * from control.mytable;" > mydata.csv
mytable相当大 - 大约1.2亿行。我担心这会占用太多的内存,当我用top监视时,内存使用量似乎在不断增加,所以当它达到某一点时我会将其杀掉。有谁知道这是真的占用了大量的内存吗?我知道top报道的用法可能会让一些不熟悉的人误解,比如我自己。有没有替代方案不会占用太多内存?
答案 0 :(得分:1)
为什么不使用COPY创建csv? COPY做得更好。
答案 1 :(得分:1)
如果您这样做,整个结果集将在客户端中构建。所以是的,它确实在使用大量内存。如果要缓解这种情况,请使用游标批量获取结果。或者使用已经内置了CSV模式的COPY
。
答案 2 :(得分:1)
如果您使用COPY,除非以postgres用户身份运行,否则必须转到stdout,然后您可以直接转到文件。
psql -U myusername dev -c "COPY (select * from control.mytable) TO STDOUT WITH CSV HEADER;" > mydata.csv