PostgreSQL-是否可以并行更新?

PostgreSQL-是否可以并行更新?,postgresql,Postgresql,我正在运行一个影响数百万行的更新,这相当耗时。在PostgreSQL中有没有一种并行化的方法 我对此进行了研究,但什么也没发现,但我有几个想法,我正在研究 1) PostgreSQL会自动做到这一点吗?如果是,那太好了 2) 如果PostgreSQL不支持此功能,则可以打开多个并发连接并并行执行更新,但请确保更新不会影响相同的行(查询之间没有共享的重叠数据)?我担心的是,PostgreSQL强制每个更新都是一个原子事务,即使它们影响不同的行,也不允许并发更新。我的担心对吗 提前谢谢你,詹姆斯 我

我正在运行一个影响数百万行的更新,这相当耗时。在PostgreSQL中有没有一种并行化的方法

我对此进行了研究,但什么也没发现,但我有几个想法,我正在研究

1) PostgreSQL会自动做到这一点吗?如果是,那太好了

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

提前谢谢你,詹姆斯

我担心的是,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

第二个事务立即运行,而第一个事务仍在运行。

否,DML当前不能使用并行执行。2) 毫无疑问,PostgreSQL在最近的版本中增加了查询的并行执行。虽然我不确定这是否适用于更新,但有充分的理由相信它适用(至少可以)。为什么不在您的场景上进行基准测试,对性能问题总是一个好主意?分析还可能对SQL的执行方式有所帮助。