使用promise链和所有的node-postgres事务

时间:2018-04-05 05:36:04

标签: transactions promise chain node-postgres

https://node-postgres.com/features/transactions 我按照上面的文档尝试使用pg为我的项目实现一些事务API。 但有一件事突然出现,一个连接(客户端)可以并行处理两个事务吗?

例如,我通过查询('BEGIN')创建一个事务,并且在此事务中,我将有一个promiseChain1,在每个步骤中,将执行一个sql。最后一步是进行查询('COMMIT'),并捕获(err =>查询('ROLLBACK'))

psuedo代码: 的 BEGIN.then(SQL1_1)。然后(SQL1_2)。然后(SQL1_3)。然后(COMMIT).catch(回滚)

我将再次通过查询('BEGIN')创建另一个事务,与前一个事务类似,将创建另一个promiseChain2,类似于前一个。 伪代码: 的 BEGIN.then(SQL2_1)。然后(SQL2_2)。然后(COMMIT).catch(回滚)

我要做的最后一件事是调用Promise.all([promiseChain1,promiseChain2])。然后(...)

取决于每个sql语句执行所花费的时间,两个BEGIN的顺序,两个COMMIT / ROLLBACK和来自两个链的其他sql语句可能是随机的,对吗?

BEGIN
SQL1_1
        BEGIN
SQL1_2
        SQL2_1
        SQL2_2
        COMMIT
SQL1_3
ROLLBACK

但由于两个“交易”实际上使用相同的连接,我认为结果将与我期望的非常不同。

任何人都可以澄清使用pg的交易概念和承诺链是否会出现问题?

1 个答案:

答案 0 :(得分:0)

似乎客户端是特定客户端凭据的连接池。并且您使用单独的异步流程开始事务,它将工作而不会影响其他人。如果两者都是隔离的保证链两者都将在池上使用单独连接(如果可用)或等待新连接可用。

enter image description here