2016-10-06 36 views
1

我们试图通过将pg_dump输出导入psql来将数据库转储导入到本地数据库。当我们在命令行中执行命令它工作正常,但它失败的Javapg_dump ProcessBuilder中的参数太多

这是怎么样子的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); 
+0

您需要构建数组或列表,并将每个标记作为列表或数组中的自己的项目。 –

+0

例如,您将字符串与空白连接在一起并将其作为标记进行提供 - 不要这样做 - 而是将它们分隔为字符串标记中没有空白的单独标记。所以不是''-h“+ hostRemote,'而是:''-h”,hostRemote,' –

+0

另外,你是否正确捕获流? –

回答

1

从@Hovercraft全部鳗鱼的评论把我推到正确的方向。 ProcessBuilder不支持开箱即用。我们需要使用ProcessBuilder生成一个shell,然后将命令输入到shell或创建两个单独的进程,然后将pg_dump的输出重定向到psql的输入!我们选择了后者。