为了账号安全,请及时绑定邮箱和手机立即绑定

如何加速 postgresql 中的 copy_expert?

如何加速 postgresql 中的 copy_expert?

小怪兽爱吃肉 2021-11-09 20:02:48
以下函数在 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。
查看完整描述

2 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

在打开的文件中指定 buffering=2**10。

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


查看完整回答
反对 回复 2021-11-09
?
DIEA

TA贡献1820条经验 获得超2个赞

我建议使用很棒的django-postgres-copy,我曾经使用它在几秒钟内轻松地将包含约 100 万行的 CSV 文件直接导入到 PostgreSQL。


它由加利福尼亚公民数据联盟制作,用于导入和导出带有 Django 对 PostgreSQL COPY 命令的支持的分隔数据。


“这个包试图让使用 COPY 像 Django 支持的任何其他数据库例程一样简单。它是由自定义模型管理器实现的。”


这是将 CSV 导入数据库表的方法。


from myapp.models import MyModel


MyModel.objects.from_csv("./data.csv", dict(name='NAME', number='NUMBER'))

这是将数据库表导出到 CSV 的方式。


from myapp.models import MyModel


MyModel.objects.to_csv("./data.csv")

阅读django-postgres-copy 文档以获取更多信息。


查看完整回答
反对 回复 2021-11-09
  • 2 回答
  • 0 关注
  • 201 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信