使用.batch和pg-promise中的参数列表

时间:2016-05-17 06:04:59

标签: node.js postgresql pg-promise

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

然而,似乎没有任何事情发生。是不是可以为这样的输入创建我的批处理列表?

1 个答案:

答案 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