sql >> Databasteknik >  >> RDS >> PostgreSQL

Återställ PostgreSQL-databas med java

Det är förvånande att kommandot du visar fungerar överhuvudtaget, eftersom du misslyckas med att citera mellanslagen i kommandosökvägen. Försök:

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);

Ändringar:

  • Konvertera enkelsträngsformen till den mycket säkrare argumentmatrisformen för exec ring;
  • Dubbla omvända snedstreck i rawDatabasen sökväg eftersom ditt ursprungliga kommando misslyckas med att undvika snedstreck, så \r är en vagnretur i strängen istället för \ char följt av r röding.
  • Byt till dubbla bakåtstreck istället för snedstreck framåt på programsökvägen för konsekvens. Denna förändring spelar förmodligen ingen roll.

Kontrollera även processens returstatus. Du måste använda Process.waitFor() sedan när den har avslutat, använd Process.exitValue() för att bestämma resultatet. Du bör undersöka stderr och stdout som fångas av Process objekt för fel och loggningsinformation.

Anledningen till att ditt program fortsätter att inte fungera beror förmodligen på:

  • Du har gamla pg_restore processer som hänger runt och håller lås; och/eller
  • Du använder inte stdout och stderr så pg_restore får slut på buffrat rörutrymme och blockerar skrivning på utgångsströmmen.

Allt detta blir mycket enklare om du använd ProcessBuilder istället . ProcessBuilder låter dig tillhandahålla filströmmar att skriva utdata till och tar i allmänhet hand om mycket av detta åt dig. Du måste fortfarande vänta på att processen ska avslutas och kontrollera dess returkod.



  1. Justera SQL-satser i SQL Developer

  2. 2 sätt att ta reda på vilket kvartal en dejt tillhör i MariaDB

  3. Aggregatfunktioner är inte tillåtna i en rekursiv fråga. Finns det något alternativt sätt att skriva den här frågan?

  4. Enkel underfråga med OuterRef