Como fazer Backup do PostgreSQL Via codigo java

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

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");
		}
	}
}
1 curtida