我是带有pg-promise for postgres的node.js,尝试按顺序进行2次插入的事务。第一个插入的结果id应该在事务的下一个插入中使用。
如果任何查询失败,则回滚。
在第一个db.none
的{{1}}内嵌套第二个.then()
将不会回滚第一个查询。所以在这里使用交易。
我坚持使用第二次查询的结果。 这就是我现在所拥有的。
db.one
使用pgp.helpers.insert为multiData查询生成第二个查询。但是,想要使用先前查询的结果是不可行的。不是吗!
有没有办法从第一个INSERT中获取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>)")
]);
})...
,即id
?
答案 0 :(得分:4)
方法sequence可以运行无限序列,这与你想要实现的目标无关 - 标准/普通事务:
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
});