完整错误:“ Knex:超时获取连接。该池可能已满。您是否错过了.transacting(trx)调用?”
我有一个超过70k行的csv / json。插入15k-17k后,它将停止并引发以上错误/。代码下方:
csvtojson({
colParser: {
name: "string",
lastname: "string"
},
checkType: true
}).fromFile(csvfile)
.then(jsonArrary => {
res.json(jsonArrary[0]);
console.log(jsonArrary.length);
jsonArrary.forEach(function(array) {
knex_insert(array);
// pg_insert(array);
});
});
function knex_insert(x) {
db("tablename")
.insert({
name: null_if_empty(x["name"]),
lastname: null_if_empty(x["lastname"])
})
.then(data => {
console.log("success!");
})
.catch(err => {
console.log(err);
});
}
function null_if_empty(value) {
if (value == "") {
return null;
} else {
return value;
}
}
知道发生了什么吗?
谢谢
答案 0 :(得分:1)
使用forEach时,您正在与数据库创建成千上万的异步连接。映射数据并将所有数据放入一个插入中:
csvtojson({
colParser: {
name: "string",
lastname: "string"
},
checkType: true
})
.fromFile(csvfile)
.then((jsonArrary) => {
const insertingData = jsonArrary.map((info) => {
return {
name: null_if_empty(info["name"]),
lastname: null_if_empty(info["lastname"])
}
});
knex_insert(insertingData)
});
function knex_insert(mappedData) {
db("tablename")
.insert(mappedData)
.then(data => {
console.log("success!");
})
.catch(err => {
console.log(err);
});
}
function null_if_empty(value) {
if (value == "") {
return null;
} else {
return value;
}
}