pg_dump ProcessBuilder 中的参数太多
pg_dump too many arguments inside ProcessBuilder
我们正在尝试通过将 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);
来自@Hovercraft Full Of Eels 的评论将我推向了正确的方向。
ProcessBuilder
不支持开箱即用的管道。我们要么需要使用 ProcessBuilder
生成一个 shell,然后将命令输入 shell,要么创建两个单独的进程,然后将 pg_dump 的输出重定向到输入psql的!我们选择了后者。
我们正在尝试通过将 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);
来自@Hovercraft Full Of Eels 的评论将我推向了正确的方向。
ProcessBuilder
不支持开箱即用的管道。我们要么需要使用 ProcessBuilder
生成一个 shell,然后将命令输入 shell,要么创建两个单独的进程,然后将 pg_dump 的输出重定向到输入psql的!我们选择了后者。