PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Przywróć bazę danych PostgreSQL za pomocą java

Zaskakujące jest to, że polecenie, które pokazujesz, w ogóle działa, ponieważ nie cytujesz spacji w ścieżce poleceń. Wypróbuj:

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

Zmiany:

  • Konwertuj formę jednołańcuchową na znacznie bezpieczniejszą formę tablicy argumentów exec zadzwoń;
  • Podwój ukośniki odwrotne w rawDatabase ścieżka, ponieważ oryginalne polecenie nie ma ucieczki od ukośników odwrotnych, więc \r jest znakiem powrotu karetki w ciągu zamiast \ znak, po którym następuje r znak.
  • Przełącz na podwójne ukośniki odwrotne zamiast ukośników do przodu w ścieżce programu, aby zachować spójność. Ta zmiana prawdopodobnie nie ma znaczenia.

Sprawdź również status zwrotu procesu. Musisz użyć Process.waitFor() następnie po wyjściu użyj Process.exitValue() aby określić wynik. Powinieneś sprawdzić stderr i stdout przechwycone przez Process obiekt dla błędów i informacji o logowaniu.

Powodem, dla którego Twój program nadal nie działa, jest prawdopodobnie to, że:

  • Masz stary pg_restore procesy kręcące się wokół zamków; i/lub
  • Nie używasz stdout i stderr, więc pg_restore zabraknie miejsca na buforowane potoki i blokuje zapis w strumieniu wyjściowym.

To wszystko będzie znacznie prostsze, jeśli użyj ProcessBuilder zamiast tego . ProcessBuilder umożliwia dostarczanie strumieni plików do zapisywania danych wyjściowych i ogólnie zajmuje się tym za Ciebie. Musisz jednak poczekać na zakończenie procesu i sprawdzić jego kod zwrotny.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. C# łączenie się z bazą danych postgres

  2. Jak w tabeli PostgresQL utworzyć kolumnę ze wszystkimi wartościami w kolumnie 1, dla której wartość bieżącego wiersza w kolumnie 1 pojawia się w kolumnie 2?

  3. Wybieranie pasującego podzbioru w relacji wiele do wielu

  4. Jak zdefiniować sekwencję do użycia podczas tworzenia tabeli w migracji ActiveRecord w Ruby on Rails 5.2?

  5. Operacja INSERT przy użyciu Node.js i PostgreSQL nie działa