Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过node和pg导入PostgreSQL数据库转储_Sql_Node.js_Postgresql - Fatal编程技术网

如何通过node和pg导入PostgreSQL数据库转储

如何通过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(

我正在尝试使用节点中的pg包将一个保存为纯文本文件的PostgreSQL数据库转储导入psql

到目前为止,我正在以字符串形式读取文件,然后尝试通过以下方法导入字符串:

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命令?您可以生成一个进程。就像任何其他带参数的程序一样