“ TimeoutError:Knex:超时获取连接。该池可能已满。”使用Knex.js插入5000多行时

时间:2019-01-16 09:54:03

标签: javascript postgresql knex.js

我正在尝试在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?

0 个答案:

没有答案