我正在尝试在Postgres数据库中插入很多条目(60,000行),并且如何设置它是将所有行加载到一个长数组中,然后使用knex.batchInsert进行操作插入它们。但是,会抛出此错误:
TimeoutError:Knex:超时获取连接。游泳池可能已满。您是否缺少.transacting(trx)通话?
根据knex文档,batchInsert已经包装在事务中,因此,如果我没有记错的话,这应该不成问题。我还尝试将其编写为forEach循环,并在其中插入插入行的事务,但这还是行不通的(但这可能是我的错;我之前从未使用过事务)。在应用引发错误之前,仅输入5,000行。
这是我与batchInsert一起使用的代码:
await knex.batchInsert('timelines', rows, 1000)
.then(console.log('success'))
.catch(function(error) {
console.log(error);
});
这是我在forEach循环中用于事务的代码:
await rows.forEach(async function (row) {
try {
knex.transaction(function(trx) {
knex('timelines').transacting(trx).insert(row)
.then(trx.commit)
.catch(trx.rollback);
})
.then(function(resp) {
console.log(resp);
console.log('Transaction complete.');
})
.catch(function(err) {
console.error(err);
});
}
catch (e) {
console.error(e);
}
因此,当我运行代码时,在出现错误之前,我只能进入5,000个条目。有什么办法可以解决这个问题,所以我可以全部输入60,000?