sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL-database herstellen met java

Het is verrassend dat de opdracht die je laat zien überhaupt werkt, omdat je de spaties in het opdrachtpad niet aanhaalt. Probeer:

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

Wijzigingen:

  • Converteer de vorm met één string naar de veel veiligere array-vorm voor argumenten van de exec bellen;
  • Dubbel de backslashes in de rawDatabase pad omdat uw oorspronkelijke commando niet kan ontsnappen aan backslashes, dus \r is een regelterugloop in de tekenreeks in plaats van de \ char gevolgd door de r char.
  • Schakel over naar dubbele backslashes in plaats van forwardslashes op het programmapad voor consistentie. Deze wijziging doet er waarschijnlijk niet toe.

Controleer ook de retourstatus van het proces. U moet Process.waitFor() gebruik daarna Process.exitValue() om het resultaat te bepalen. Je moet de stderr en stdout onderzoeken die zijn vastgelegd door het Proces object voor fouten en loginformatie.

De reden dat uw programma niet blijft werken, is waarschijnlijk omdat:

  • Je hebt een oude pg_restore processen die rondhangen met sloten; en/of
  • Je gebruikt stdout en stderr niet, dus pg_restore heeft geen gebufferde pijpruimte meer en blokkeert schrijven op de uitvoerstroom.

Dit zal allemaal veel eenvoudiger zijn als u gebruik ProcessBuilder in plaats daarvan . Met ProcessBuilder kunt u bestandsstromen leveren om uitvoer naar te schrijven en regelt dit over het algemeen veel voor u. U moet echter nog steeds wachten tot het proces is beëindigd en de retourcode controleren.



  1. Hoe rijen te bestellen of te kiezen in de MySQL GROUP BY-clausule?

  2. T-sql Rijnummer resetten bij veldwijziging

  3. AbstractMethodError op resultset.getObject

  4. Is het mogelijk om een ​​nieuwe rij bovenaan de MySQL-tabel in te voegen?