在psql中更新几十万行

时间:2017-04-05 14:19:22

标签: python postgresql

我有大约450,000个条目的词典,如下:

{'id1': 123, 'id2': 234, ..., 'id3': 567}

对于字典中的每一行,我需要在postgres DB中执行更新。为了执行一行,我的sql语句如下所示:

UPDATE employee.ids set "idNr" = <val> where "id" LIKE '%<id>%'; 

我的问题是找到一种有效的方法来做到这一点。执行450 000个单个查询可能需要永远,所以有没有办法有效地执行此操作?

1 个答案:

答案 0 :(得分:1)

由于PostgreSQL可以从版本9.3处理json,如果您使用的是该版本或更新版本,您可以使用单个查询更新值,将字典作为json参数传递。

查询应如下所示:

<div class="main_box">

  <div class="flexbox_images">
    <a href="">
      <div class="image_background image_background_left">
        <div class="fleximagebox_link">Buy
          <div class="main_black_bar">&nbsp;</div>
        </div>
      </div>
    </a>
    <a href="">
      <div class="image_background image_background_right">
        <div class="fleximagebox_link">
          <div class="main_black_bar">&nbsp;</div>Sell</div>
      </div>
    </a>
  </div>

</div>

我认为这种方法会快得多。从版本9.4开始,jsonb也受支持。这可能会快一点,但我认为它不会产生太大的影响。 使用jsonb的查询如下所示:

update employee e set idnr = a.value::text::int8
from
json_each('{"id1": 123, "id2": 234, "id3": 567}'::json) a
where a.key = e.id