pg_dump在ProcessBuilder中有太多参数

时间:2016-10-06 15:51:05

标签: java postgresql psql processbuilder pg-dump

我们试图通过将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);

1 个答案:

答案 0 :(得分:1)

来自@Hovercraft Full Of Eels的评论让我走向了正确的方向。 ProcessBuilder不支持开箱即用。我们要么需要用ProcessBuilder生成一个shell,然后将命令输入shell或创建两个单独的进程,然后将pg_dump的输出重定向到psql的输入!我们选择了后者。