Olá galera!
Desenvolvi um aplicativo para criar o banco de dados e restaurar os arquivos de backup no postgreSQL. Percebi que o comando pg_restore somente restaura o arquivo de backup se a senha do servidor do banco de dados estiver salva no próprio banco. Só percebi isso pq tive que atualizar meu servidor do postgreSQL do 9.0 para o 9.1 pois estava distibuindo minhas aplicações com o 9.1 enquanto desenvolvia com o 9.0. Todos os meus .bat (para gerar o backup como para restaura o banco) estava tendo que criar 2 versões, uma para teste durante o desenvolvimento e outra para instalar na máquina do cliente (com as devidas alterações).
Então, minha dúvida é a seguinte …
Gostaria de saber se não tem como passar essa senha de alguma outra forma, para eu não deixar o banco de dados “aberto” para o cliente manipular os dados diretamente no banco. Estou utilizando os seguintes códigos … para restaura o backup …
Runtime r = Runtime.getRuntime();
try {
Process p = r.exec("C:/Arquivos de programas/PostgreSQL/9.1/bin/pg_restore -d "+ tfDataBase.getText().trim() + " -F c -v -h localhost -p 5432 -U postgres " + tfBackup.getText());
System.out.println(p);
if (p != null) {
OutputStream outputStream = p.getOutputStream();
outputStream.write("123\r\n".getBytes()); //Como vcs podem notar, já estou passando a senha no código, mas isso não está adiantando!
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);
}
}
JOptionPane.showMessageDialog(null, "Estrutura do Banco de Dados Restaurada!");
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Erro na Restauração do Banco de Dados.");
e.printStackTrace();
}
}
… e para abrir o arquivo que se deseja fazer o backup …
try{
JFileChooser busca_arquivo = new JFileChooser(System.getProperty("user.dir"));
busca_arquivo.setCurrentDirectory(new File("C:/"));
busca_arquivo.setDialogTitle("Selecione o Arquivo Desejado.");
busca_arquivo.showOpenDialog(this);
String arquivo = "\""+busca_arquivo.getSelectedFile().getAbsolutePath()+"\"";
tfBackup.setText(arquivo);
}catch(Exception e){
JOptionPane.showMessageDialog(null, "Erro ao Capturar Arquivo");
e.printStackTrace();
}
}