sql >> Base de Datos >  >> RDS >> PostgreSQL

Restaurar base de datos PostgreSQL usando Java

Es sorprendente que el comando que muestra funcione, ya que no cita los espacios en la ruta del comando. Prueba:

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

Cambios:

  • Convierta la forma de cadena única a la forma de matriz de argumentos mucho más segura del exec llamar;
  • Duplique las barras invertidas en rawDatabase ruta ya que su comando original no logra escapar de las barras diagonales inversas, por lo que \r es un retorno de carro en la cadena en lugar de \ char seguido de r char.
  • Cambie a barras invertidas dobles en lugar de barras diagonales en la ruta del programa para mantener la coherencia. Este cambio probablemente no importe.

También verifique el estado de devolución del proceso. Debe usar Process.waitFor() luego, una vez que haya salido, use Process.exitValue() para determinar el resultado. Debe examinar el stderr y el stdout capturados por el Process objeto para errores e información de registro.

La razón por la que su programa sigue sin funcionar es probablemente porque:

  • Tienes un antiguo pg_restore procesos dando vueltas sosteniendo cerraduras; y/o
  • No estás consumiendo stdout y stderr así que pg_restore se queda sin espacio de tubería almacenado en búfer y bloquea la escritura en el flujo de salida.

Todo esto será mucho más sencillo si usar ProcessBuilder en cambio . ProcessBuilder le permite proporcionar secuencias de archivos para escribir la salida y, en general, se encarga de gran parte de esto por usted. Sin embargo, aún debe esperar a que finalice el proceso y verificar su código de retorno.