bom pessoal , to querendo cirar uma classe em JAVA que faça backup do banco postgreSQL será que isso é possível , c alguem tiver alguma sugestão
eu serei muito grato… bom desde ja muito obrigado
olá diegopangone,
Até onde eu sei, comandos de bkp não são instruções padrão SQL, cada banco define as suas.
Enfim, postei pra reforçar a dúvida, também estou interessado em saber se existe uma forma em Java de acessar esses recursos ... :P JDBC tem algo?
Flws!
diegopangone,
O que o schmidt falou é correto: backup/restore não são funções definidas no JDBC. Fazendo uma pesquisa no Google, descobri que a solução proposta nestes casos é fazer uma chamada ao execute da Runtime para rodar o pg_dump e o pg_restore.
Dá uma olhada:
[list] http://archives.postgresql.org/pgsql-hackers/2006-09/threads.php#02271[/list]
[list] http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=3&t=010288[/list]
Abraços!
vlw galera comsegui fazer , fiz o seguinte
Scanner s = new Scanner(Runtime.getRuntime().exec(“C:\Arquivos de programas\PostgreSQL\8.1\bin\pg_dump.exe -i -h 127.0.0.1 -p 5432 -U postgres -F c -b -v -f C:\banco2.backup panificadora”).getInputStream());
e agora deu certinho
Como vc fez para passar a senha? Agradeço antecipadamente.
tambem quero saber como passar a senha para o pg_dump.exe a senha do banco ???
arquivo pg_hba.conf do postgre
ultimas linhas do arquivo pg_hba.conf
TYPE DATABASE USER CIDR-ADDRESS METHOD
IPv4 local connections:
host all all 127.0.0.1/32 trust
local all all trust
IPv6 local connections:
#host all all ::1/128 trust
no java
Runtime.getRuntime().exec(“C:\arquivos de programas\PostgreSQL\8.3\bin\pg_dump -i -h localhost -p 5432 -U postgres -F c -b -v -f backup.backup”);
ai funcionou beleza
E mas dessa forma para conectar no seu banco nao precisa informar a senha, alguem conseguiu passar a senha ??
valeu
arquivo pg_hba.conf
original
TYPE DATABASE USER CIDR-ADDRESS METHOD
IPv4 local connections:
host all all 127.0.0.1/32 trust
local all all trust
IPv6 local connections:
#host all all ::1/128 trust
acrecenta essa linha
local all all trust
Runtime.getRuntime().exec(“C:\arquivos de programas\PostgreSQL\8.3\bin\pg_dump -i -h localhost -p 5432 -U postgres -F c -b -v -f backup.backup”);
ai funciona aqui funcionou perfeitamente
Entao mas com essa linha vc libera para acessar seu banco sem senha, e isso que eu nao quero entendeu, com essa linha se o usuario pegar um pgadmin ele consegue acessar o banco
eu uso um bat com essa instrução… SET PGPASSWORD = “senha”
Eu criei uma classe para tratar este tipo de situação, utilizei o ProcessBuilder e está funcionando perfeitamente.
public class Backup {
public static void fazBackup(String arquivo, String diretorio){
File arq = new File(arquivo);
if (arq.exists()){
if (arq.length() > 0)
arq.delete();
}
try {
Process p = null;
String linha = "";
ProcessBuilder pb = new ProcessBuilder(diretorio+"pg_dump.exe", "-i", "-h", "ip da máquina", "-U", "base de dados", "-F", "c", "-b", "-v", "-f", arquivo, "usuario");
pb.environment().put("PGPASSWORD", "senha");
pb.redirectErrorStream(true);
p = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((linha = reader.readLine()) != null){
System.out.println(linha);
}
}catch (Exception e) {
System.out.println("Não foi possível efetuar o backup");
}
}
}