2017-06-19 136 views
1

我試圖使用節點中的pg包導入PostgreSQL數據庫轉儲,並將其保存爲純文本文件。如何通過節點導入PostgreSQL數據庫轉儲和pg

到目前爲止我讀的文件作爲字符串,然後試圖通過下面的方法來導入字符串:

var sql = fs.readFileSync('./dbDumpOutput').toString(); 
pg.connect('postgres://localhost:5432/testdb', function(err, client, done){ 
    if(err){ 
     console.log('error: ', err); 
     process.exit(1); 
    } 
    client.query(sql, function(err, result){ 
    done(); 
    if(err){ 
     console.log('error: ', err); 
     process.exit(1); 
    } 
    process.exit(0); 
}); 

,我發現了以下錯誤:error: { error: syntax error at or near "\"

這是一個格式化問題,我必須解析出我的dbdump,還是我做了其他不正確的事情?

回答

1

這是因爲純文本pg_dump使用COPY FROM STDIN,結果是\.。我認爲你不能用這個 brianc的pg模塊(否則this就不需要了)。您可以嘗試在pg_dump上指定--inserts來生成插入。但我會建議只使用pg_dump生成的轉儲恢復工具,如psql

+0

我知道如何在命令行中使用psql,但我怎樣才能通過節點運行我的psql命令? –

+0

你可以產生一個過程。就像其他有參數的程序一樣 –

0

我得到了一個工作解決方案,我已經在下面提供了使用psql而不是pg。

const { spawn } = require('child_process'); 

const child = spawn('createdb', ['psqltest']); 

child.on('exit', function (code, signal) { 
    console.log('child process exited with ' + 
       `code ${code} and signal ${signal}`); 
    const cat = spawn('cat',['dbDumpOutput']); 
    const imp = spawn('psql',['psqltest']); 
    cat.stdout.pipe(imp.stdin); 
});