Ich versuche, über 1 Million Zeilen in Postgres Tabelle mit NodeJs einfügen Das Problem ist, wenn ich Skript beginne, der Speicher ständig zu erhöhen, bis es 1,5 GB RAM erreichen und I-Fehler dann erhalten: FATAL eRROR: CALL_AND_RETRY_LAST Allocation fehlgeschlagen - Prozess aus dem SpeicherFügen Sie eine große Anzahl von Zeilen in Postgres DB mit NodeJS
das Ergebnis ist immer das gleiche - etwa 7000 eingefügten Zeilen anstelle von 1 Million
Hier ist der Code
var pg = require('pg');
var fs = require('fs');
var config = require('./config.js');
var PgClient = new pg.Client(config.pg);
PgClient.connect();
var lineReader = require('readline').createInterface({
input: require('fs').createReadStream('resources/database.csv') //file contains over 1 million lines
});
var n=0;
lineReader.on('line', function(line) {
n++;
var insert={"firstname":"John","lastname":"Conor"};
//No matter what data we insert, the point is that the number of inserted rows much less than it should be
PgClient.query('INSERT INTO HUMANS (firstname,lastname) values ($1,$2)', [insert.firstname,insert.lastname]);
});
lineReader.on('close',function() {
console.log('end '+n);
});
Haben Sie versucht zu pausieren, sobald Sie eine Zeile erhalten und wieder aufnehmen, sobald der Rückruf der Abfrage aufgerufen wurde? Ich denke, es sind zu viele Anfragen in der Warteschlange, und das könnte Ihren Prozessspeicher erschöpfen. – mscdex
I aded lineReader.pause(); vor Abfrage und lineReader.resume(); Nach der Abfrage sieht das aber nicht so aus. Derselbe Fehler – m3n1at
Ziehen Sie stattdessen Masseneinfügungen in Betracht. Das Einfügen auf einer Zeile ist zu teuer. –