我正在运行一个影响数百万行的更新,它非常耗时。有办法在PostgreSQL中并行化吗?
我研究了这个,什么也没有发现,但我有几个想法,我在摇摆不定。
1) PostgreSQL会自动做到这一点吗?如果是,那就太好了。
2)如果PostgreSQL不支持这一点,那么可以打开多个并发连接并并行执行更新,但要确保更新不会影响相同的行(查询之间没有数据重叠)?我担心的是,PostgreSQL强制每个更新都是原子事务,即使它们影响到不同的行,也不允许并发更新。我的担心对吗?
提前谢谢詹姆斯。
发布于 2018-09-26 19:57:04
我担心的是,PostgreSQL强制每个更新都是原子事务,即使它们影响到不同的行,也不允许并发更新。
让我们来测试
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第二个事务立即运行,而第一个事务仍在运行。
https://stackoverflow.com/questions/52524873
复制相似问题