postgressql更新表在循环中并在每10000次更新后提交

时间:2018-01-05 01:37:20

标签: postgresql

我的表A包含keycol,col2,col3,表B也包含其他列。想要使用表A中的值更新表B列,并为每10k更新提交一次。下面是我正在尝试运行的查询但想要使用游标并每10k更新一次。

UPDATE b
SET 
  column2 = a.column2,
  column3 = a.column3
FROM a
WHERE a.id = b.id 

1 个答案:

答案 0 :(得分:0)

首先,您需要了解哪些记录尚未更新(并且可能添加具有相应条件的部分索引,以加快更新速度)。

我认为它是b.column2 is nullb.column2 is null的记录尚未更新)。

在这种情况下,您的查询可能是:

update b
set column2 = a.column2, column3 = a.column3
from a 
where
  a.id = b.id
  and b.id in (
    select id
    from b
    where column2 is null
    order by id
    limit 10000
  )
;

索引加快速度:

create index i_b_tmp on b using btree(id) where column2 is null;

如果你想手动运行一堆UPDATE,只需打开psql,执行第一次更新,然后输入\watch 0.1 - 它将每0.1秒重复一次查询。