Mengejutkan bahwa perintah yang Anda tampilkan berfungsi sama sekali, karena Anda gagal mengutip spasi di jalur perintah. Coba:
String[] cmd = {
"D:\\Program Files\\PostgreSQL\\9.1\\bin\\pg_restore.exe",
"--host", "localhost",
"--port", "5432",
"--username", "postgres",
"--dbname", "mytestqq",
"--role", "postgres",
"--no-password",
"--verbose",
"D:\\sathish\\rawDatabase.backup"
};
p = r.exec(cmd);
Perubahan:
- Konversikan bentuk string tunggal ke bentuk larik argumen yang jauh lebih aman dari
execpanggilan; - Gandakan garis miring terbalik di
rawDatabasejalur karena perintah asli Anda gagal lolos dari garis miring terbalik, jadi\radalah carriage return dalam string alih-alih\char diikuti olehrkarakter. - Beralih ke garis miring terbalik dua kali lipat alih-alih garis miring ke depan pada jalur program untuk konsistensi. Perubahan ini mungkin tidak masalah.
Periksa juga status pengembalian proses. Anda harus menggunakan Process.waitFor()
kemudian setelah keluar gunakan Process.exitValue()
untuk menentukan hasilnya. Anda harus memeriksa stderr dan stdout yang ditangkap oleh Process objek untuk kesalahan dan informasi logging.
Alasan program Anda terus tidak berfungsi mungkin karena:
- Anda memiliki
pg_restorelama proses berkeliaran memegang kunci; dan/atau - Anda tidak menggunakan stdout dan stderr jadi
pg_restorekehabisan ruang pipa buffer dan memblokir penulisan pada aliran keluaran.
Ini semua akan jauh lebih sederhana jika Anda gunakan ProcessBuilder sebagai gantinya
. ProcessBuilder memungkinkan Anda menyediakan aliran file untuk menulis output dan umumnya menangani banyak hal ini untuk Anda. Anda masih harus menunggu hingga proses berhenti dan memeriksa kode pengembaliannya.