使用Python多处理加速将Postgres中的大表提取到CSV

2021-09-27 04:59:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从几个表中选择所有行,并将它们保存在单独的csv中。你知道吗

我已经在使用多处理池为每个表创建单独的进程。 但是表非常大(每个表有2000000行),获取所有表都需要时间。你知道吗

 import psycopg2
 from multiprocessing import Pool

 def pg_to_csv(table_name):

     conn = psycopg2.connect(PG_DEV_CONFIG)
     cur = conn.cursor()

     query = f"""
         SELECT * FROM public.{table_name}
     """

     output_query = "COPY ({0}) TO STDOUT WITH CSV HEADER".format(query)
     with open(table_name+'.csv', 'w') as output_csv:
         cur.copy_expert(output_query, output_csv)
         output_csv.close()

     conn.close()
     return

if __name__ == '__main__':
    args = ['table1', 'table2','table3','table4']
    p = Pool(4)
    p.map(pg_to_csv, args)

在这种情况下,最好的做法是什么?如何加快进程?你知道吗