【问题标题】:node-postgres: multi-query is atomic?node-postgres:多查询是原子的?
【发布时间】:2019-02-06 06:44:25
【问题描述】:

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

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

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

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

【问题讨论】:

  • pg-promise 在执行multi 方法时不提供任何自动事务,这意味着问题应该针对其node-postgres 驱动程序。除此之外,我不希望多查询操作是原子的,但我也从未测试过这样的事情。

标签: postgresql pg-promise node-postgres


【解决方案1】:

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

如果发现任何问题,我会调查原因,并发布更新。见the open issue

更新

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

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

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

【讨论】:

  • 相关讨论:postgresql.org/message-id/… 尚无定论,但似乎这可能是 postgres 的标准行为。
  • @Code 我已经确定了我的答案。请接受,如果它足够好;)
猜你喜欢
  • 2016-03-18
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
  • 2015-01-28
  • 2015-05-19
  • 2020-02-03
  • 2021-06-11
  • 1970-01-01
相关资源
最近更新 更多