猿问

如何加速 postgresql 中的 copy_expert?

以下函数在 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。


小怪兽爱吃肉
浏览 202回答 2
2回答

大话西游666

在打开的文件中指定 buffering=2**10。我认为这是 OSX 上 psycopg2 的问题。我遇到了同样的问题,它在 ubuntu 上运行得非常快。无论数据库是否在 OSX 和 Ubuntu 上,它在 OSX 上都很慢。我的 copy_expert 在 OSX 上花了 13 分钟。当我更改 buffering=2**10 时,它从 13 分钟变为 7 秒。

DIEA

我建议使用很棒的django-postgres-copy,我曾经使用它在几秒钟内轻松地将包含约 100 万行的 CSV 文件直接导入到 PostgreSQL。它由加利福尼亚公民数据联盟制作,用于导入和导出带有 Django 对 PostgreSQL COPY 命令的支持的分隔数据。“这个包试图让使用 COPY 像 Django 支持的任何其他数据库例程一样简单。它是由自定义模型管理器实现的。”这是将 CSV 导入数据库表的方法。from myapp.models import MyModelMyModel.objects.from_csv("./data.csv", dict(name='NAME', number='NUMBER'))这是将数据库表导出到 CSV 的方式。from myapp.models import MyModelMyModel.objects.to_csv("./data.csv")阅读django-postgres-copy 文档以获取更多信息。
随时随地看视频慕课网APP

相关分类

Python
我要回答