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
exec
ring; - Fordoble omvendte skråstreger i
rawDatabasen
sti, da din oprindelige kommando ikke undslipper skråstreg, så\r
er en vognretur i strengen i stedet for\
char efterfulgt afr
char. - 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_restore
processer, der hænger rundt med låse; og/eller - Du bruger ikke stdout og stderr, så
pg_restore
lø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.