Como fazer Backup do PostgreSQL Via codigo java

11 respostas
D

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

11 Respostas

Anderson_Schmidt

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!

fcoury

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!

D

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

M

Como vc fez para passar a senha? Agradeço antecipadamente.

fabiodurgante

tambem quero saber como passar a senha para o pg_dump.exe a senha do banco ???

fabiodurgante

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

fabioebner

E mas dessa forma para conectar no seu banco nao precisa informar a senha, alguem conseguiu passar a senha ??

valeu

fabiodurgante

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

fabioebner

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 :confused:

S

eu uso um bat com essa instrução… SET PGPASSWORD = “senha”

M

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");
		}
	}
}
Criado 18 de outubro de 2006
Ultima resposta 2 de jul. de 2013
Respostas 11
Participantes 7