我是带有 pg-promise for postgres 的 node.js,尝试按顺序执行 2 个插入的事务。第一次插入的结果 ID 应在事务中的下一次插入中使用。
如果任何查询失败则回滚。
嵌套第二次db.none
inside .then()
of 1st db.one
不会回滚第一个查询。所以这里使用事务。
我坚持在第二个查询中使用第一个查询的结果。
这是我现在所拥有的。
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 生成多数据查询。但想要使用前一个查询的结果是不可行的。不是吗!
有没有办法得到id
i.e. <above_id>
从第一个插入?
Method sequence http://vitaly-t.github.io/spex/global.html#sequence是否可以运行无限序列,这与您想要实现的目标无关 - 一个标准/琐碎的事务:
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]);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)