使用PostgreSQL加速数据库中的插入表

使用PostgreSQL加速数据库中的插入表,sql,postgresql,Sql,Postgresql,我使用python进行编码,使用psql保存数据。 我的问题是,当我写入数据库时,大约需要2-3分钟。 数据大小约为1200000(行)和3列 插入功能: def store_data(cur,table_name,data): cur.executemany( "INSERT INTO"+" "+table_name+" "+"(name, date,id) VALUES (%s, %s, %s)", [(data[i][0], data[i][1], data[i][

我使用python进行编码,使用psql保存数据。 我的问题是,当我写入数据库时,大约需要2-3分钟。 数据大小约为1200000(行)和3列

插入功能:

def store_data(cur,table_name,data):
    cur.executemany(
    "INSERT INTO"+" "+table_name+" "+"(name, date,id) VALUES (%s, %s, %s)",
    [(data[i][0], data[i][1], data[i][2]) for i in xrange(0,len(data))]
    )

    cur.connection.commit()

如何加速功能?

使用
COPY
命令。同时查看副本上的psycopg


部分数字:单独插入300万行:3小时。使用复制:7秒。

优秀的PostgreSQL文档中有一章详细介绍了

除了W.Mann建议的使用之外,如果您有进一步的性能要求,您还可以做更多:

  • 删除临时索引
  • 删除外键并检查临时约束
  • 增加维护工作量
  • 增加最大壁尺寸
  • 禁用WAL存档和流式复制
  • 事后运行分析

如果使用pg_restore,可以尝试在多处理器系统上使用
-j
选项并行运行多个作业。并查看上面链接的文档中给出的其他选项。

查看以下文档:

在同一位置可以找到以下链接:他们建议:

 psycopg2.extras.execute_batch

更快?增加了一些数字。它们源自我所使用的数据库调优类。我将数据保存到数组列表中。将其转换为复制喜欢的CSV格式,例如使用StringIO(python 2)或io.StringIO(python 3)
 psycopg2.extras.execute_batch