如何通过node和pg导入PostgreSQL数据库转储
我正在尝试使用节点中的pg包将一个保存为纯文本文件的PostgreSQL数据库转储导入psql 到目前为止,我正在以字符串形式读取文件,然后尝试通过以下方法导入字符串:如何通过node和pg导入PostgreSQL数据库转储,sql,node.js,postgresql,Sql,Node.js,Postgresql,我正在尝试使用节点中的pg包将一个保存为纯文本文件的PostgreSQL数据库转储导入psql 到目前为止,我正在以字符串形式读取文件,然后尝试通过以下方法导入字符串: var sql = fs.readFileSync('./dbDumpOutput').toString(); pg.connect('postgres://localhost:5432/testdb', function(err, client, done){ if(err){ console.log(
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在“\”处或附近
这是因为纯文本pg\u dump使用了STDIN的
复制,而STDIN的复制结果是。
。我想你不能使用STDIN的pg模块的复制(否则就不需要了)。您可以尝试在pg_dump上指定--inserts
来生成inserts。但我建议只使用pg_dump生成的dump所需的工具来还原,例如psql
我得到了一个工作解决方案,我在下面提供了它,使用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);
});
我知道如何在命令行中使用psql,但如何通过node运行我的psql命令?您可以生成一个进程。就像任何其他带参数的程序一样