【发布时间】:2016-03-07 08:38:45
【问题描述】:
我有一个对象数组,每个对象都有多个属性。例如:
var obj = [{a : '1', b : '2'},{a : '3', b : '4'}];
为了匹配数据库表的顺序,我正在生成一个具有批量插入所需顺序的新数组。
var bulkInsert = function(arrData){
var orderedData = [];
arrData.forEach(function(obj){
orderedData.push(obj.b + ',' + obj.a);
});
return orderedData;
};
现在,我想将输出的对象数组批量插入到 postgres 表中:
client.query("INSERT INTO sometable(b, a) VALUES" +
" ($1, $2)", [orderedData], function (err, result) {
if (err) {
return handleError(err, client, done);
}
});
但是,这会引发错误:
error fetching client from pool { [error: bind message supplies 1 parameters, but prepared statement "" requires 2]
串行版本工作正常,如果每个插入情况都在一个循环中迭代,但对于更大的数组来说会很慢..
【问题讨论】:
-
[orderedData]应该是orderedData,因为该值已经是一个数组。否则,它需要 1 个变量而不是预期的 2 个变量,因此会出现错误。
标签: javascript arrays node.js postgresql bulkinsert