我正在运行一个影响数百万行的UPDATE,这非常耗时。有没有办法在PostgreSQL中并行化它?
我对此进行了研究,但一无所获,但我有两个想法要解决。
1)PostgreSQL是否会自动执行此操作?如果是,那就太好了。
2)如果PostgreSQL不支持此功能,则可以打开多个并发连接并并行执行UPDATES,但要确保UPDATES不会影响相同的行(查询之间没有共享的重叠数据)?我担心的是PostgreSQL强制每个UPDATE都是原子事务,并且即使它们影响不同的行也不允许并行更新。我的担心正确吗?
谢谢,詹姆斯。
答案 0 :(得分:2)
我担心的是PostgreSQL强制每个UPDATE都是原子的 交易,即使影响到并发更新也不允许 不同的行。
让我们测试
create table test(
id int,
name text
);
insert into test
values
(1, 'a'),
(2, 'b');
然后运行此事务:
do $$
begin
update test set
name = 'aa'
where id = 1;
perform pg_sleep(15);
end;
$$ language plpgsql
然后将其作为另一个事务运行
do $$
begin
update test set
name = 'bb'
where id = 2;
end;
$$ language plpgsql
第二笔交易立即运行,而第一笔交易仍在运行。