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