【问题标题】:How pg-promise handles transactions with Promise.all()pg-promise 如何使用 Promise.all() 处理事务
【发布时间】:2022-12-11 16:12:50
【问题描述】:

在我的一个项目中,我想与 pg-promise 并行执行 2 个查询。我将这些查询包含在交易中,如下所示。我还使用 Promise.all() 并行进行数据库调用。我想了解它在内部是如何工作的,因为事务使用单个数据库连接进行查询,这是否意味着第二个查询只能在第一个查询完成后执行,因为第一个查询持有 txn?


const {TransactionMode} = pgp.txMode;

// Create a reusable transaction mode (serializable + read-only + deferrable):
const mode = new TransactionMode({
    readOnly: true,
    deferrable: true
});

db.tx({mode}, t => {
    return Promise.all([t.any('SELECT * FROM table1'),t.any('SELECT * FROM table2')]);
})
.then(data => {
   // success;
})
.catch(error => {
   // error
});

由于事务获取单个数据库连接来运行事务中的所有查询,因此了解它是如何完成的会很有趣。

【问题讨论】:

    标签: node.js postgresql es6-promise pg-promise promise.all


    【解决方案1】:

    由于事务对两个查询都使用单个数据库连接,是否意味着第二个查询只能在第一个查询完成后执行?

    是的,正是这样。 Postgres 不支持同一客户端连接上的并行查询,当然也不支持同一事务中的并行查询。

    【讨论】:

      猜你喜欢
      • 2020-06-13
      • 1970-01-01
      • 2020-08-08
      • 2017-02-23
      • 2019-11-30
      • 1970-01-01
      • 2020-09-05
      • 2017-05-30
      • 1970-01-01
      相关资源
      最近更新 更多