pg-promise:在事务中的下一个查询中使用一个查询的结果

时间:2017-05-05 06:25:31

标签: node.js postgresql transactions pg-promise

我是带有pg-promise for postgres的node.js,尝试按顺序进行2次插入的事务。第一个插入的结果id应该在事务的下一个插入中使用。

如果任何查询失败,则回滚。 在第一个db.none的{​​{1}}内嵌套第二个.then()将不会回滚第一个查询。所以在这里使用交易。

我坚持使用第二次查询的结果。 这就是我现在所拥有的。

db.one

使用pgp.helpers.insert为multiData查询生成第二个查询。但是,想要使用先前查询的结果是不可行的。不是吗!

有没有办法从第一个INSERT中获取db.tx(function (t) { return t.sequence([ // generated using pgp.helpers.insert for singleData query t.one("INSERT INTO table(a, b) VALUES('a', 'b') RETURNING id"), t.none("INSERT INTO another_table(id, a_id) VALUES(1, <above_id>), (2, <above_id>)") ]); })... ,即id

1 个答案:

答案 0 :(得分:4)

方法sequence可以运行无限序列,这与你想要实现的目标无关 - 标准/普通事务:

db.tx(t => {
    return t.one('INSERT INTO table1(a, b) VALUES($1, $2) RETURNING id', [1, 2], x=>+x.id)
        .then(id => {
            return t.none('INSERT INTO table2(id, a_id) VALUES($1, $2)', [1, id]);
        });
})
    .then(data => {
        // success, data = null
    })
    .catch(error => {
        // error
    });