web-dev-qa-db-ja.com

node-postgresで一括挿入を行う方法

Expressとnode-pgを使用してExcelファイルをpostgresデータベースにインポートしています

現在、Excelの行をループして、すべての行に対して挿入を実行していますが、それは正しい方法ではないと感じています。

workbook.xlsx.readFile(Excel_file).then(function () {
        // get the first worksheet          
        var worksheet = workbook.getWorksheet(1);
        // Loop through all rows
        worksheet.eachRow(function (row, rowNumber) {
            // Commit to DB only from line 2 and up. We want to exclude headers from Excel file
            if (rowNumber > 1) {
                // Loop through all values and build array to pass to DB function
                row.eachCell(function (cell, colNumber) {
                    arrSQLParams.Push(cell.value)                   
                })

                // Add the user id from session to the array
                arrSQLParams.Push(user);

                // Insert into DB
                db.query(strSQL, arrSQLParams, function (err, result) {
                    if (err) {
                        console.log(err);
                            ret = false;
                        }
                })

                // Empty the array for new query
                arrSQLParams = [];
            }
        })          
    });

パフォーマンスを向上させるためにこれを行うためのより良い方法はありますか?

7

著者によって提供された説明に従って、一度に最大1000レコードを挿入するには、 pg-promiseを使用した複数行の挿入 内で提案されているソリューションは、両方のパフォーマンスの観点から、著者がまさに必要としているものです。と柔軟性。

[〜#〜]更新[〜#〜]

必読の記事: データインポート

1
vitaly-t

このパッケージを使用できます https://www.npmjs.com/package/pg-essential 。 node-postgresにパッチを適用し、executeBulkInsertion関数を呼び出すだけです。挿入するオブジェクトの配列を作成して、executeBulkInsertion関数に渡すことができます。

let bulkData = [];
foreach( user in users){
 bulkData.Push(user);
}
await db.executeBulkInsertion(bulkData,[array of column names],[table name]);
0
Zia Uddin