使用pg-promise
(基于node-postgres
)时,multi
查询似乎是原子的。
例如,即使仅第二个PostgreSQL
由于重复的ID而失败,下面的INSERT
查询也根本不插入任何行。不使用任何交易。
insert into mytable (id) values (1); insert into mytable (id) values (1)
此行为似乎违反直觉,并且与psql
的行为不同。这是错误吗?
答案 0 :(得分:1)
我的测试表明,是的,令人惊讶的是,它是原子的,即,如果一个查询失败,它们都将失败,就像在事务内部一样。
如果有任何发现,我将调查原因,并发布更新。参见the open issue。
更新
调查已证实,当在单个字符串中发送多个查询时,PostgreSQL确实是这样工作的。
方法multi和multiResult的文档已作相应修改:
该操作是原子操作,即所有查询都在单个事务中执行,除非查询字符串中包含明确的
BEGIN/COMMIT
命令以将其分为多个事务。