将Postgres表复制到CSV输出,使用python在n个文件上分页

时间:2018-11-16 13:53:25

标签: python postgresql psycopg2

使用psycopg2将Postgres数据导出到CSV文件(不是一次全部,一次10万行)。当前使用LIMIT OFFSET,但显然在100M行db上这很慢。有没有更快的方法来跟踪每次迭代的偏移量?

for i in (0, 100000000, 100000): "COPY (SELECT * from users LIMIT %s OFFSET %s) TO STDOUT DELIMITER ',' CSV HEADER;" % (100000, i)

代码是否在循环中运行,使i递增

1 个答案:

答案 0 :(得分:1)

让我建议您采用另一种方法。

复制整个表,然后将其拆分。像这样:

COPY users TO STDOUT DELIMITER ',' CSV HEADER

最后,从bash中执行split命令(顺便说一句,您可以在python脚本中调用它):

split -l 100000 --numeric-suffixes users.csv users_chunks_

它将生成几个名为users_chunks_1,users_chunks_2等的文件。