PostgreSQL-是否可以并行化UPDATE?

时间:2018-09-26 19:31:13

标签: postgresql

我正在运行一个影响数百万行的UPDATE,这非常耗时。有没有办法在PostgreSQL中并行化它?

我对此进行了研究,但一无所获,但我有两个想法要解决。

1)PostgreSQL是否会自动执行此操作?如果是,那就太好了。

2)如果PostgreSQL不支持此功能,则可以打开多个并发连接并并行执行UPDATES,但要确保UPDATES不会影响相同的行(查询之间没有共享的重叠数据)?我担心的是PostgreSQL强制每个UPDATE都是原子事务,并且即使它们影响不同的行也不允许并行更新。我的担心正确吗?

谢谢,詹姆斯。

1 个答案:

答案 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

第二笔交易立即运行,而第一笔交易仍在运行。