node-postgres:多重查询是原子的吗?

时间:2018-08-31 09:00:58

标签: postgresql pg-promise node-postgres

使用pg-promise(基于node-postgres)时,multi查询似乎是原子的。

例如,即使仅第二个PostgreSQL由于重复的ID而失败,下面的INSERT查询也根本不插入任何行。不使用任何交易。

insert into mytable (id) values (1); insert into mytable (id) values (1)

此行为似乎违反直觉,并且与psql的行为不同。这是错误吗?

1 个答案:

答案 0 :(得分:1)

我的测试表明,是的,令人惊讶的是,它是原子的,即,如果一个查询失败,它们都将失败,就像在事务内部一样。

如果有任何发现,我将调查原因,并发布更新。参见the open issue

更新

调查已证实,当在单个字符串中发送多个查询时,PostgreSQL确实是这样工作的。

方法multimultiResult的文档已作相应修改:

  

该操作是原子操作,即所有查询都在单个事务中执行,除非查询字符串中包含明确的BEGIN/COMMIT命令以将其分为多个事务。