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

node-postgres: multi-query is atomic?

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

例如,以下 PostgreSQL 查询根本不插入任何行,即使只有第二个 INSERT 由于 ID 重复而失败。未使用任何事务。

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

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

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

我会调查原因,post 如果发现任何问题,我会进行更新。参见 the open issue

更新

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

方法文档 multi and multiResult 已相应修改:

The operation is atomic, i.e. all queries are executed in a single transaction, unless there are explicit BEGIN/COMMIT commands included in the query string to divide it into multiple transactions.