Boa noite pessoas.
Já estou a 1 dia tentando achar uma solução para a criação de rotina de backup e restauração pelo Java mas, não consigo. Não sou de abrir tópico mas, não consegui achar nada na internet.
Estou realizando a criação do arquivo de backup pelo código abaixo:
public String geraBackup(String sCaminhoDiretorio, String sData){
String sMensagem = "";
Runtime r = Runtime.getRuntime();
try{
Process p = r.exec(System.getProperty("user.dir")+"/lib/pg_dump -c -b --column-inserts -E utf8 -h localhost -p 5432 -U postgres -F t -i -v -f "+sCaminhoDiretorio+"/"+sData+".tar controdoc");
if(p != null){
OutputStream outputStream = p.getOutputStream();
outputStream.write("SENHA".getBytes());
outputStream.flush();
outputStream.close();
InputStreamReader streamReader = new InputStreamReader( p.getErrorStream() );
BufferedReader reader = new BufferedReader( streamReader );
String linha;
while( (linha = reader.readLine()) != null ){
System.out.println(linha);
}
}
} catch(IOException ioe){
ioe.printStackTrace();
sMensagem = ioe.getMessage();
}
return sMensagem;
}
O arquivo é gerado de forma correta porém, não consigo restaurar esse backup. Já usei vários tipos de restore, com várias opções. Alguns dão erro de “Broken Pipe” (pelo fato de algumas combinações de comandos não estarem de forma correta). Nos restore que deram certo, para testar se o mesmo está mesmo realizando o backup fiz o seguinte teste:
01 - Fiz o backup e o arquivo foi gerado e salvo;
02 - Alterei um registro no programa. Ex.: estava com nome de “Daniel” e coloquei “Daniel TESTE TESTE TESTE”;
03 - Fiz o restore do arquivo gerado anteriormente e esse registro que eu alterei, deveria estar da mesma forma antes (Daniel) mas o mesmo não retornou na forma original, ficando como “Daniel TESTE TESTE TESTE”
Peço, por gentileza, para verificarem se o pg_dump (as opções dele) estão corretas (preciso gerar um backup completo…tabelas, dados, etc…) e se estiver, qual o pg_restore eu devo proceder.
Esse pg_dump está em formato “tar” mas, já fiz o teste em formato “text” alterando o Process para:
Mesmo com essa alteração, continuo com a pendência.
Obs.: estou utilizando o MacbookPro para desenvolvimento e o programa roda em Windows na empresa. Ambos estão com o banco PostgreSQL instalados.