Det er overraskende, at den kommando, du viser, overhovedet virker, da du undlader at citere mellemrummene i kommandostien. Prøv:
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);
Ændringer:
- Konverter enkeltstrengsformen til den meget sikrere argumentarrayform for
execring; - Fordoble omvendte skråstreger i
rawDatabasensti, da din oprindelige kommando ikke undslipper skråstreg, så\rer en vognretur i strengen i stedet for\char efterfulgt afrchar. - Skift til dobbelte omvendte skråstreger i stedet for fremadgående skråstreger på programstien for at opnå konsistens. Denne ændring er sandsynligvis ligegyldig.
Tjek også processens returstatus. Du skal bruge Process.waitFor()
så når den har afsluttet brug Process.exitValue()
at bestemme resultatet. Du bør undersøge stderr og stdout fanget af Process objekt for fejl og logningsoplysninger.
Grunden til, at dit program fortsat ikke virker, er sandsynligvis fordi:
- Du har gamle
pg_restoreprocesser, der hænger rundt med låse; og/eller - Du bruger ikke stdout og stderr, så
pg_restoreløber tør for bufferet rørplads og blokerer for skrivning på outputstrømmen.
Dette vil alt sammen være meget enklere, hvis du brug ProcessBuilder i stedet
. ProcessBuilder lader dig levere filstrømme til at skrive output til og tager sig generelt af meget af dette for dig. Du skal dog stadig vente på, at processen afsluttes og kontrollere dens returkode.