2016-10-06 59 views
1

pg_dumpの出力をpsqlにパイプして、データベースデータベースにデータベースダンプをインポートしようとしています。我々は、コマンドラインでコマンドを実行すると、それが正常に動作しますが、それは、JavaProcessBuilder内のpg_dump引数が多すぎます

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の:コマンドライン引数が多すぎます(最初のものは|)。

私たちが見ていない特別なキャッチはありますか?どんな助けもありがとう。

EDIT:別のトークンをクリーンアップ:

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のシェルを作成し、シェルにコマンドを入力するか、別々の2つのプロセスを作成して、pg_dumpの出力をpsqlの入力にリダイレクトする必要があります。我々は後者を選んだ。

関連する問題