COPY_FROM对psycopg2上的批量数据抛出.read()调用错误

时间:2019-06-18 13:39:18

标签: python-3.x psycopg2 sqlbulkcopy

我正在尝试将mongodb移植到Postgres。我正在使用COPY_FROM来更快地插入批量数据,但是我仍然遇到相同的错误:

  

psycopg2.extensions.QueryCanceledError:从标准输入中复制失败:错误   在.read()调用中

我的原始代码会尝试一次性填充表格,但是如果我将数据分成几批,则不会引发错误,这是一个阈值,大约每批300万条记录:

# Base case (only 1 iteration) : throws .read() call error

MAX_BATCH_SIZE = total_bulk_size
iterations = math.ceil(total_bulk_size / MAX_BATCH_SIZE)
while n_batch < iterations:
      for record in batch:
         string_io_writer.writerow(row[...])
      string_io.seek(0)
      sql = 'COPY table1 FROM stdin WITH (FORMAT csv)'
      copy_expert(sql, string_io)
      postgres.commit()

# case #2: MAX_BATCH_SIZE = 5_000_000 (processing batches of 5M records)
# throws .read() call error

# case 3: MAX_BATCH_SIZE = 3_000_000 (processing batches of 3M records)
# Table is successfully populated and no error is thrown

我的目标是尽可能快地填充表,因此将数据分成多个批次会破坏使用COPY_FROM的目的。

我认为这可能是内存不足的问题,但是我猜抛出的异常会有所不同。另外,我一直在跟踪内存消耗,当内存崩溃时并不是100%。

有什么主意吗?

PS:我曾尝试在Postgres的命令行上使用COPY_FROM,它可以一次处理全部数据

0 个答案:

没有答案