我有一个对象数组,每个对象都有多个属性。例如:
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]如果每次插入都在循环上迭代,则串行版本工作得很好,但对于较大的数组,它将很慢。
发布于 2015-12-03 06:09:10
尝试从阵列中卸下方括号。它已经是一个数组了,你不需要它们
发布于 2015-12-04 23:43:58
您应该将参数作为两个大小的数组进行传递。以便同时插入两行。尝试将以下查询重复两次:
client.query("INSERT INTO sometable(b, a) VALUES" + " ($1, $2)", [1,2], function (err, result) { if (err) { return handleError(err, client, done); } });
client.query("INSERT INTO sometable(b, a) VALUES" + " ($1, $2)", [3,4], function (err, result) { if (err) { return handleError(err, client, done); } });https://stackoverflow.com/questions/34054023
复制相似问题