我正在使用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 = [];
}
})
});
有没有更好的方法来提高性能呢?
答案 0 :(得分:1)
根据作者提供的说明,一次最多可插入1000条记录,Multi-row insert with pg-promise中建议的解决方案正是作者在性能和灵活性方面所需要的。
<强>更新强>
必读文章:Data Imports。
答案 1 :(得分:0)
您可以使用此软件包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]);