如何在SailsJs中使用PostgreSQL事务?

时间:2016-09-12 20:12:57

标签: node.js postgresql transactions sails.js sails-postgresql

我的问题是我有一个复杂的查询链,如果此事务的某个人失败,它会进行回滚。 我已经阅读了Sails中的事务,并且,默认情况下,Sails不支持事务,因为每个事务都与Postgres建立新连接,因此,一个查询具有新连接。 那么,我如何使用Sails进行交易?

2 个答案:

答案 0 :(得分:1)

目前水线不支持交易。您可以在此处加入讨论https://github.com/balderdashy/waterline/issues/755

交易在路线图上,但不会在不久的将来发生:https://github.com/balderdashy/waterline/blob/master/ROADMAP.md#pending-proposals

作为一种解决方法,您可以尝试https://github.com/Shyp/pg-transactions但是您将失去水线的灵活性,因为您的代码将不再与数据库无关。

同时检查Sails.js best practice in using transactions with promises (Postgres)Sails.js + Postgres: issue with transactions

答案 1 :(得分:1)

最简单的方法是通过pg-promise支持的自动交易:

db.tx(t=> {
    // - returning a value or a resolved promise will result in COMMIT
    // - returning a resolved promise or throwing an error will result in ROLLBACK
})
    .then(data=> {
        // COMMIT has been executed
        // data  = data returned from the callback
    })
    .catch(error=> {
        // ROLLBACK has been executed
        // error = rejection reason or error thrown
    });

但你需要直接执行你的查询,而不是通过Waterline,而@zabware说:

  

您将失去水线的灵活性,因为您的代码将不再与数据库无关。

另请参阅:Transactions