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

myt*_*der 3 postgresql transactions node.js pg-promise

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

如果任何查询失败,则回滚。db.none.then()1st 内部嵌套2nd db.one不会回滚1st查询。因此,在这里使用交易。

我被困在第二个中使用第一个查询的结果。这就是我现在所拥有的。

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>)")
    ]);
})...
Run Code Online (Sandbox Code Playgroud)

第二查询使用pgp.helpers.insert生成,用于multiData查询。但是,要使用上一个查询的结果是不可行的。是不是!

是否有一种方式来获得id,即<above_id>从第一INSERT?

vit*_*y-t 5

方法序列可以运行无限序列,这与您要实现的目标无关-标准/琐碎的事务:

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
    });
Run Code Online (Sandbox Code Playgroud)