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

pg-promise: use result of one query in next query within a transaction

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

如果任何查询失败则回滚。 在第一个 db.one.then() 中嵌套第二个 db.none 不会回滚第一个查询。所以在这里使用一个事务。

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

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>)")
    ]);
})...

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

有没有办法从第一个 INSERT 中获取 id,即 <above_id>

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

await db.tx(async t => {
    const id = await t.one('INSERT INTO table1(a, b) VALUES(, ) RETURNING id', [1, 2], a => +a.id);
    await t.none('INSERT INTO table2(id, a_id) VALUES(, )', [1, id]);
});