簡體   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