我们正试图通过将pg_dump输出通过管道传输到psql来将数据库转储导入本地数据库。当我们在命令行中执行命令时,它工作得很好,但是在Java的ProcessBuilder中失败了
这就是它的样子:

ProcessBuilder processBuilder = new ProcessBuilder("pg_dump", "-h" + hostRemote,
"-p" + portRemote, "-U" + usernameRemote, "-a", dbNameRemote, "|",
"psql", "-h" + hostLocal, "-p" + portLocal, "-U" + usernameLocal, dbNameLocal);

这就是我们得到的错误:pg_dump:命令行参数太多(第一个是|)。
有没有什么特别的收获我们没看到?任何帮助都将不胜感激。
编辑:清除单独的标记:
ProcessBuilder processBuilder = new ProcessBuilder("pg_dump", "-h", hostRemote,
"-p", Integer.toString(portRemote), "-U", usernameRemote, "-a", dbNameRemote, "|",
"psql", "-h", hostLocal, "-p", Integer.toString(portLocal),
"-U", usernameLocal, dbNameLocal);

最佳答案

“气垫船上满是鳗鱼”的评论把我推向了正确的方向。
ProcessBuilder不支持管道开箱即用。我们要么生成一个带有ProcessBuilder的shell,然后将命令输入shell,要么创建两个单独的进程,然后将pg_dump的输出重定向到psql的输入!我们选择了后者。

关于java - pg_dump ProcessBuilder中的参数太多,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39900502/

10-14 09:57