pg-promise:在一个事务中的下一个查询中使用一个查询的结果。[英] pg-promise: use result of one query in next query within a transaction

本文是小编为大家收集整理的关于pg-promise:在一个事务中的下一个查询中使用一个查询的结果。的处理方法,想解了pg-promise:在一个事务中的下一个查询中使用一个查询的结果。的问题怎么解决?pg-promise:在一个事务中的下一个查询中使用一个查询的结果。问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我是带有 pg-promise for postgres 的 node.js,尝试按顺序执行 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> ?

推荐答案

方法 序列 可以运行无限序列,这与您要实现的目标无关 - 一个标准/微不足道的事务:

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
    });

本文地址:https://www.itbaoku.cn/post/1763904.html