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