我有一小段代碼從文件讀取一行,解析並插入到我的數據庫中。使用knex從文件中讀取並插入到數據庫中的錯誤
但是後10〜12萬行,我總是得到這個錯誤:
Unhandled rejection Error: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call?
的第一個文件大約有15萬線。
已經試圖直接操縱交易,但沒有成功。
關於如何正確管理資源以創建所有文件的任何想法?
這裏去我想要的代碼現在:
var fs = require('fs');
var knexfile = require('./knexfile');
var knex = require('knex')(knexfile.production);
var readline = require('readline');
var rl = readline.createInterface({
terminal : false,
input : fs.createReadStream('FOO_BAR.TXT') // About 150k lines
});
knex.transaction(function(tx){
rl.on('line', function(line) {
knex("dadosbrutos").insert({ // this table does exists
AA_DATA : line.substring(0,8),
BB_DATA : line.substring(8,16),
CC_DATA : line.substring(36,44)
}).then(function(){
tx.commit(); // dies after 12k inserts
});
});
});
我會用一個promise.each在每一行,返回插入和代替。然後你剛纔使用.transacting(TRX) – vbranden
你好@vbranden,這聽起來是合理的。我可以promisify readline? – Sombriks