2011-02-03 58 views
2

你好 我想将一个postgres表转储到csv。数据库位于我工作的(Linux)机器的本地。psql转储表和内存使用

psql dev -U myusername -c "select * from control.mytable;" > mydata.csv 

mytable相当大 - 约1.2亿行。我担心这会占用过多的内存,而当我用顶级内存进行监控时,内存使用量似乎不断增加,所以当它达到某个特定点时就会杀死它。有谁知道这是不是确实占用了可怕的内存?我知道顶层报道的用法可能会让一些不熟悉的人误解,比如我自己。有没有其他选择不会占用太多的记忆?

+1

可能重复:http://stackoverflow.com/questions/2768702/dump-to-csv-postgres-memory – payne 2011-02-03 03:39:43

回答

1

为什么不使用COPY来创建csv? COPY做得更好。

1

如果你这样做,整个结果集将建立在客户端。所以是的,它确实在使用大量的内存。如果您想减轻这一点,请使用光标批量获取结果。或者使用COPY,它已经内置了CSV模式。

1

如果您使用COPY,则必须转到标准输出,除非将其作为postgres用户运行,那么您可以直接转到文件。

psql -U myusername dev -c "COPY (select * from control.mytable) TO STDOUT WITH CSV HEADER;" > mydata.csv 
+0

很好的答案 - 这对我帮助很大。 – thetaiko 2011-03-10 22:25:15