2016-10-06 69 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的輸入!我們選擇了後者。