我正在尝试用 Python 构建一个应用程序,将大量表从一个数据库(或一组数据库)复制到另一个单一数据库。
我为此目的使用 Psycopg2,对于较小的表,我现有的代码运行良好。我只是获取表,将其存储在 Pandas DataFrame 中,然后使用以下函数将其复制到目标数据库中copy_expert
:
df.to_csv(output, sep='\t', header=True, index=False)
output.seek(0)
copy_query = "COPY " + table + " FROM STDOUT csv DELIMITER '\t' NULL '' ESCAPE '\\' HEADER "
cur.copy_expert(copy_query, output)
同样,这适用于小表,但对于具有数十列和数百万行的大表,我会消耗大量内存(这会导致崩溃)并且经常让远程数据库取消我的复制请求(我无法调整的配置来解决这个问题,可能是由于超时)。
有没有一种更节省内存的方法可以使用 Psycopg2 复制大量非常大的表?
请注意,我也在尝试使用多线程“生产者-消费者”模式以“消费者”的形式实现我的复制解决方案。
感谢您的帮助和建议!