首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PostgreSQL加速数据库中的插入表

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

Stack Overflow用户
提问于 2017-09-02 21:09:13
回答 3查看 130关注 0票数 2

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

插入函数:

代码语言:javascript
复制
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()

如何对函数进行加速?

EN

回答 3

Stack Overflow用户

发布于 2017-09-02 21:30:52

使用COPY命令。Postgres Documentation。也可以在副本中查看心理医生documentation

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

票数 4
EN

Stack Overflow用户

发布于 2017-09-02 23:46:13

卓越 PostgreSQL文档中有一个关于"Populating a Database"的详细章节

除了像W.Mann建议的那样使用COPY之外,如果您有更多的性能要求,还可以做更多的事情:

归档和流分析删除索引temporary

  • Remove外键和检查约束temporary

  • Increase maintenance_work_mem

  • Increase max_wal_size

  • Disable WAL Archival temporary

  • Increase maintenance_work_mem

  • Increase max_wal_size

  • Disable Streaming Replication

  • Run and

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

票数 1
EN

Stack Overflow用户

发布于 2017-09-03 01:10:34

查看executemany的文档

代码语言:javascript
复制
Warning
In its current implementation this method is not faster than 
executing execute() in a loop. For better performance you can use 
the functions described in Fast execution helpers. 

在同一位置可以找到到:http://initd.org/psycopg/docs/extras.html#fast-exec的链接,他们推荐:

代码语言:javascript
复制
 psycopg2.extras.execute_batch
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46014168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档