PG宣传:在事务中的下一个查询中使用一个查询的结果



i是pg-promise for Postgres的node.js,试图用序列进行2个插入物进行交易。第一插入的结果ID应在交易中的下一个插入物中使用。

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

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

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.intert生成第二查询。但这是不可行的,希望使用上一个查询的结果。不是!

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

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

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

最新更新