2017-06-19 14 views
1

ノードにpgパッケージを使用して、プレーンテキストファイルとして保存されたPostgreSQLデータベースダンプをpsqlにインポートしようとしています。ノードとpg経由でPostgreSQLデータベースダンプをインポートする方法

これまでのところ、私は次のメソッドを介して文字列をインポートしようとすると、文字列としてファイルに読んでいる:私は次のエラーを取得しています

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を使用し、\.で終了するためです。私はあなたがこれを使用することはできませんと思うCOPY FROM STDIN briancのpgモジュール(そうでない場合は、thisに必要はありません)。代わりにpg_dumpに--insertsを指定して、挿入を生成することができます。しかし、私は、pg_dumpのためのツールを使用して復元することをお勧めします。psql

+0

私はコマンドラインでpsqlを使用する方法を理解していますが、ノード経由でpsqlコマンドを実行するにはどうすればよいですか? –

+0

プロセスを起動できます。引数を持つ他のプログラムと同じように –

0

pgの代わりにpsqlを使用して、私が下で提供した実用的な解決法を得ました。

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); 
}); 
関連する問題