Backup no PostgreSQL

fmz galera ?

como q eu faco o backup e restaração do sistema no PostgreSQL ???

valeu

Olá amigo…

Eu precisei muito disso também, e demorei para conseguir fazer.
Ai está a classe para fazer o backup:

public class Backup {
	public void realizaBackup(){
	    Runtime r = Runtime.getRuntime();            
	    try{
	    	Process p = r.exec(" \"C:\\Arquivos de programas\\PostgreSQL\\8.0\\pgAdmin III\\pg_dump.exe\" -i -h localhost -p 5432 -U user -F c -b -v -f \"C:\\backup\\bancodados.backup\" seubanco");
	    	if(p != null){
	    		OutputStream outputStream = p.getOutputStream();
	    		outputStream.write("suasenha\r\n".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();
	    }
	}
}

Uma breve exlicação do código acima:
Eu testei no windows, em outro sistema operacional acredito que deve-se mudar dentro de r.exec();

Se executar a linha que está dentro do método r.exec("") no prompt do DOS, ele fica pedindo “Passord:”, até não informar a senha do usuário que você DEVE passar no comando executado como “-U seuusuario”, ele fica ali parado.

Ao executar pelo java, acontece o mesmo, e você deve informar a senha do usuario que foi especificado na linha acima. Como o método r.exec(""); retorna um Process é através dele que conseguimos “enviar uma mensagem” para o DOS informando a senha especificamente no código:

  OutputStream outputStream = p.getOutputStream();
  outputStream.write("suasenha\r\n".getBytes());
  outputStream.flush();
  outputStream.close();

Na parte do código

InputStreamReader streamReader = new InputStreamReader( p.getErrorStream() );
BufferedReader reader = new BufferedReader( streamReader );
String linha;
while( (linha = reader.readLine()) != null )
	System.out.println(linha);

O método getErrorStream() da classe Process, retorna um possível erro que pode ocorrer, você pode usar também o método getInputStream().

Espero ter ajudado.

Olá amigo, sei que o post é bem antigo, mas estou com dificuldades em passar a senha do banco.

Mesmo passando a senha pela linha

 outputStream.write("postgres".getBytes()); 

E finalizando a criação do arquivo de bkp do banco, ele apresenta erro na restauração.

Estou usando o linux, tem alguma diferença??

Valeu.

veja que na linha 5 onde ele passa o path para o Process ele coloca o path completo para o pg_dump no windows

no seu caso (Linux), tira o “C;/…” até o pg_dump deve funcionar (se o pg_dump estiver no PATH, geralmente está)

caso não esteja utiliza os comando wich pg_dump ou então whereis pg_dump para descobrir o path completo