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.
当使用 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.