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?
方法序列可以运行无限序列,这与您要实现的目标无关-标准/琐碎的事务:
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)
| 归档时间: |
|
| 查看次数: |
1499 次 |
| 最近记录: |