1

我正在运行 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]);
        }
    });
})

但是,它似乎不起作用,因为没有任何反应。是不是可以为这样的输入创建我的批处理列表?

4

1 回答 1

4

方法batch不将函数作为参数,它需要一个 promise 数组来解析。

并且有很多关于如何使用它的例子(也在 StackOverflow 上),从官方文档开始:Transactions

对于一组更新,您只需创建一个更新查询数组,然后使用批处理执行它们:

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

额外的

同一类型的多个更新可以作为单个查询执行,以获得更好的性能。请参阅性能提升和方法helpers.update

于 2016-05-17T11:34:35.407 回答