繁体   English   中英

使用准备好的语句插入多行

[英]Insert multiple rows using prepared statement

我有一个对象数组,每个对象都有多个属性。 例如:

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]

如果插入的每种情况都在一个循环中进行迭代,则串行版本可以正常工作,但是对于较大的阵列,它将很慢。

尝试从数组中删除方括号。 它已经是一个数组,您不需要它们

您应该将参数作为两个大小的数组传递。 为了同时插入两行。 尝试重复以下查询两次:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM