PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Възстановете базата данни на PostgreSQL с помощта на java

Изненадващо е, че командата, която показвате, изобщо работи, тъй като не успявате да цитирате интервалите в командния път. Опитайте:

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

Промени:

  • Преобразувайте формата с един низ в много по-безопасната форма на масив от аргументи на exec обаждане;
  • Удвоете обратните наклонени черти в rawDatabase път, тъй като оригиналната ви команда не успява да избегне обратните наклонени черти, така че \r е връщане на каретка в низа вместо \ char, последван от r char.
  • Превключете към удвоени обратни наклонени черти вместо наклонени черти напред в пътя на програмата за последователност. Тази промяна вероятно няма значение.

Също така проверете състоянието на връщане на процеса. Трябва да използвате Process.waitFor() след това, след като излезе, използвайте Process.exitValue() за определяне на резултата. Трябва да прегледате stderr и stdout, уловени от Process обект за грешки и информация за регистриране.

Причината, поради която програмата ви продължава да не работи, вероятно е следната:

  • Имате стар pg_restore процеси, висящи около държащи ключалки; и/или
  • Вие не използвате stdout и stderr, така че pg_restore изчерпва буферираното пространство на канала и блокира записа в изходния поток.

Всичко това ще бъде много по-лесно, ако използвайте ProcessBuilder вместо това . ProcessBuilder ви позволява да предоставяте файлови потоци за запис на изход и като цяло се грижи за голяма част от това вместо вас. Все пак трябва да изчакате процесът да приключи и да проверите неговия код за връщане.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Инсталацията на PostGIS Homebrew препраща към стар път?

  2. Ограничението на Postgres UNIQUE предполага ли индекс?

  3. Разбиране на системните колони в PostgreSQL

  4. Параметризирана IN клауза, използваща множество колони

  5. psql задава default statement_timeout като потребител в postgres