在PostgreSQL表上应用150M更新的最快方法是什么?

时间:2016-07-06 20:55:47

标签: postgresql

我们有一个150M行的文件,只用这些命令更新一个postgresql数据库表:

UPDATE "events" SET "value_1" = XX, "value_2" = XX, "value_3" = XX, "value_4" = XX WHERE "events"."id" = SOME_ID;

所有ID都是唯一的,无法将该更新应用于多个事件。目前,如果我们在psql中使用\i update.sql运行此更新大约需要几天。

有没有更快的方法来运行它?

1 个答案:

答案 0 :(得分:3)

  • 最简单:在set synchronous_commit=off

  • 之前添加\i update.sql
  • 更好:

    • 将文件拆分为100000个更新的部分:
      split -l 100000 -a 6 --additional-suffix=.sql update.sql update-part
    • 并行运行这些更新,每个文件都在单个事务中运行,例如: /bin/ls update-part*.sql \ | xargs --max-procs=8 --replace psql --single-transaction --file={}