在多个核心之间分布查询(PostgreSQL 9.3)

Distribute Query among more than one core (PostgreSQL 9.3)

有一个处理大文件 (~1GB) 的 paython 脚本,然后将其内容插入到 PostgreSQL 数据库 9.3 中,所有这些都在一个连接中完成。这个过程需要很长时间,所以我想将这个问题分配给多个核心(我有 8 个核心),但从我读过的内容来看,这似乎是不可能的。知道是否有解决方法吗?

我的一段代码:

import psycopg2 as psycopg
try:
  connectStr = "dbname='postgis20' user='postgres' password='' host='localhost'"
  cx = psycopg.connect(connectStr)
  cu = cx.cursor()
  logging.info("connected to DB")
except:
  logging.error("could not connect to the database")

global cx
        try: 
                 cu.execute("INSERT INTO taxi (userid,carNum) SELECT '"+str(msg['UserID'])+"',"+str(msg['CarNumber']))
                 cu.execute
                 cu.execute
                 cu.execute
                 cu.execute
                 ..
                 ..
                 ..
                 .

        except Exception, err:
                 print('ERROR: %s\n' % str(err))
                 cx.commit()
       cx.commit()   

并行化您的 python 程序不会改变这样一个事实,即您将一行接一行地插入到同一个记录的 table 中(每次都放置和删除锁并禁止缩放)。

将数据批量插入 postgresql 是一个经典主题:将数据批量导入 postgresql 的最佳方法是使用 COPY 命令(即使您在 python 程序中,您应该使用这个 postgresql 命令)。

postgresql.org 站点在 how to optimize your import. You should also read this SO answer on the same subject 上有一个页面。