我正在运行nodejs和pg-promise,并希望使用批处理函数创建一个包含多个UPDATE的BEGIN和COMMIT的事务。
这是我的代码:
db.tx(function (t) {
return this.batch(function() {
for (var i = 0; i < cars.length; i++) {
return db.any('UPDATE ... ', [car_id, cars[i].votes]);
}
});
})
然而,似乎没有任何事情发生。是不是可以为这样的输入创建我的批处理列表?
答案 0 :(得分:2)
方法batch不接受函数作为参数,它需要一组promises来解析。
还有很多关于如何使用它的例子(在StackOverflow上也是如此),从官方文档开始:Transactions。
对于一组更新,您只需创建一个更新查询数组,然后使用batch执行它们:
db.tx(t => {
const queries = cars.map(c => {
return t.none('UPDATE ... ', [c.car_id, c.votes]);
});
return t.batch(queries);
})
.then(data => {
// success
})
.catch(error => {
// error
});
<强>附加强>
相同类型的多个更新可以作为单个查询执行,以获得更好的性能。请参阅Performance Boost和方法helpers.update。