PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Restaurar banco de dados PostgreSQL usando java


É surpreendente que o comando que você mostra funcione, já que você não está citando os espaços no caminho do comando. Tentar:
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);

Mudanças:
  • Converter o formulário de string única para o formato de array de argumentos muito mais seguro do exec ligue;
  • Duplique as barras invertidas no rawDatabase path, pois seu comando original não consegue escapar de barras invertidas, então \r é um retorno de carro na string em vez do \ char seguido pelo r caractere.
  • Mude para barras invertidas duplas em vez de barras no caminho do programa para manter a consistência. Essa mudança provavelmente não importa.

Verifique também o status de devolução do processo. Você deve usar Process.waitFor() depois de sair, use Process.exitValue() para determinar o resultado. Você deve examinar o stderr e o stdout capturados pelo Process objeto para erros e informações de registro.

A razão pela qual o seu programa continua a não funcionar é provavelmente porque:
  • Você tem o pg_restore antigo processos pendurados segurando fechaduras; e/ou
  • Você não está consumindo stdout e stderr, então pg_restore fica sem espaço em buffer e bloqueia a gravação no fluxo de saída.

Tudo será muito mais simples se você use ProcessBuilder em vez disso . O ProcessBuilder permite fornecer fluxos de arquivos para gravar a saída e geralmente cuida de muito disso para você. Você ainda deve esperar que o processo termine e verifique seu código de retorno.