有沒有一種很好的方式將大型CSV(4GB +)以流的形式放入NodeJS中的postgres數據庫中?Nodejs流CSV,在postgres中創建表並使用COPY導入從
特別是,我想採取第一行(標題行),並製作一個創建查詢。然後,我想將文件的其餘部分從聲明中複製到副本。
這將是可行的,如果我只是想發送到複製命令,例如:
function copyStreamIntoTable (inputStream) {
var deferred = Q.defer();
pg.connect("pg://[email protected]/npi_demo", function (err, client) {
var s = client.copyFrom("COPY hptc (code, type, classification, specialization, definition, notes) FROM STDIN WITH CSV HEADER");
inputStream.pipe(through(function (data) {
this.queue(data.toString("ascii"));
})).pipe(s).on('close', function() {
deferred.resolve();
});
});
return deferred.promise;
}
但我想流有第一線讀取,然後運行創建查詢。一旦創建查詢完成,id就像將流的其餘部分流到copyFrom。
有沒有一個優雅的方式來做到這一點?我仍然是nodejs和流的新手。
檢查node.js的PostgreSQL接口是否明確支持其API中的「COPY」。如果可能,您將希望使用任何此類支持,而不是直接嘗試使用「COPY」語句。 –
@CraigRinger謝謝 - 我會檢查一下。 –
作爲一個方面說明,我被節點中的流超級困惑......我知道我可以使用類似於readline的東西讀取第一行......並且我可以使用readline將其餘部分寫入postgres流.. 。但爲了正確地尊重pg應用的背壓,事情似乎變得複雜得多,除非我使用管道 –