以下函数在 111 秒内导入了大约 60k 条记录。我听说其他人说 copy_from 和 copy_expert 在不到一分钟的时间内完成了 100 万条记录。与使用 copy_from 相比,使用 copy_expert 是否会减慢进程?我可以做些什么来优化它?
cursor = connection.cursor()
cursor.copy_expert('''
COPY employee_employee (name, slug, title, base, overtime, other, gross, benefits, ual, total, year, status, jurisdiction_id, notes)
FROM STDIN WITH (FORMAT csv, HEADER true, FORCE_NOT_NULL (status));
''', open(csv_fname),
)
至于相关变量,数据库连接来自Django(from django.db import connection
)。数据库在我本地的 Macbook Pro 上,是 PostgreSQL 10。
最佳答案
在打开的文件中指定 buffering=2**10。
我认为这是 OSX 上的 psycopg2 的问题。我有同样的问题,它在 ubuntu 上运行得非常快。无论数据库是否在 OSX 和 Ubuntu 上,它在 OSX 上都很慢。我的 copy_expert 在 OSX 上花费了 13 分钟。当我更改 buffering=2**10 时,它从 13 分钟变为 7 秒。
关于python - 如何加速 postgresql 中的 copy_expert?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54709865/