Erro ao fazer backup do postgre via código![RESOLVIDO]

Olá amigos.
Estou precisando da ajuda de vocês aqui.
É o seguinte, estou desenvolvendo uma aplicação e ela faz o backup do banco de dados automaticamente a cada 3 dias…
Só que estou tentando utilizar esse código abaixo mas ele gera erro:

[code]
public void realizaBackup() throws IOException, InterruptedException{
List comandos = new ArrayList();
comandos.add(“C:\Program Files\PostgresPlus\8.4SS\bin\pg_dump.exe”);
comandos.add("-i");
comandos.add("-h");
comandos.add(“localhost”);
comandos.add("-p");
comandos.add(“5432”);
comandos.add("-U");
comandos.add(“postgres”);
comandos.add("-F");
comandos.add(“c”);
comandos.add("-b");
comandos.add("-v");
comandos.add("-f");
comandos.add(“C:\IBV System”);
comandos.add(“banco_teste”);

        ProcessBuilder pb = new ProcessBuilder(comandos);  
  
        pb.environment().put("PGPASSWORD", "post");          
  
        try {  
            final Process process = pb.start();  
  
            final BufferedReader r = new BufferedReader(  
                new InputStreamReader(process.getErrorStream()));  
            String line = r.readLine();  
            while (line != null) {  
            System.err.println(line);  
            line = r.readLine();  
            }  
            r.close();  
  
            final int dcertExitCode = process.waitFor();  
  
        } catch (IOException e) {  
            e.printStackTrace();  
        } catch (InterruptedException ie) {  
            ie.printStackTrace();  
        }  
        
    }[/code]

ERRO:

pg_dump: [arquivador personalizado] nao pode abrir arquivo de saida "C:\IBV System": Permission denied

O que eu faço para poder liberar o acesso, ou alguém tem um outro código que faça o backup do banco via código java!!?!??
Já liberei o acesso total a pasta IBV System no diretório C:, que inclusive faço várias transações de arquivos nesse diretório via código e sem nenhum problema…
Se tiverem outro código que funfe por favor me passem aqui pra eu dar uma olhada…
Abraços
Me ajuuuda!!!

problema pode ser o espaço no nome da pasta de backup

experimente mudar

comandos.add("C:\\IBV System");    
comandos.add("banco_teste");  

para

comandos.add("C:\\backup\\");    
comandos.add("banco_teste.sql");  

Olá amigo…
Cara, tentei fazer o que vc me falou mas o erro de permissão continua… :frowning:
Vc tem outro código que faça esse backup?
Não estou entendendo o porque da permissão negada, pois eu estou dando todos os privilégios nessa pasta para todos os usuários…
E mesmo assim não vai :frowning:

Você consegue disponibilizar o seu codigo para eu dar uma olhada?

tenho um postgres aqui nesse pc e acho que consigo resolver e te falar onde era o erro

abraço

Tá na mão amigo!!

[code]
public void realizaBackup() throws IOException, InterruptedException{
List comandos = new ArrayList();
comandos.add(“C:\Program Files\PostgresPlus\8.4SS\bin\pg_dump.exe”);
comandos.add("-i");
comandos.add("-h");
comandos.add(“localhost”);
comandos.add("-p");
comandos.add(“5432”);
comandos.add("-U");
comandos.add(“postgres”);
comandos.add("-F");
comandos.add(“c”);
comandos.add("-b");
comandos.add("-v");
comandos.add("-f");
comandos.add(“C:\IBV System”);
comandos.add(“banco_teste”);

        ProcessBuilder pb = new ProcessBuilder(comandos);  
  
        pb.environment().put("PGPASSWORD", "post");          
  
        try {  
            final Process process = pb.start();  
  
            final BufferedReader r = new BufferedReader(  
                new InputStreamReader(process.getErrorStream()));  
            String line = r.readLine();  
            while (line != null) {  
            System.err.println(line);  
            line = r.readLine();  
            }  
            r.close();  
  
            final int dcertExitCode = process.waitFor();  
  
        } catch (IOException e) {  
            e.printStackTrace();  
        } catch (InterruptedException ie) {  
            ie.printStackTrace();  
        }  
        
    }
      [/code]

segura ae

O Arquivo até gerou mas zerado, parece que ele fica aguardando digitar a senha mesmo passando ela depois, você já fez isso funcionar alguma vez?

Ainda não amigo…
Eu peguei esse código na net mas ainda não consegui executar ele…
Vc já tentou algo assim cara?
Tem algum código que funcione?
Obrigado pela força!

Funcionou, se der erro ai pode ser permissão do seu sistema OS na hora de criar o arquivo, segue abaixo o codigo completo, apenas altere o que for diferente para sua instalação, caso não funcione vamos ver o que pode ser, mas deve ser algo no seu OS de permissão.


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;


public class PostgresBackup {

	public static void realizaBackup() throws IOException, InterruptedException{    
       final List<String> comandos = new ArrayList<String>();    
       
       //comandos.add("C:\\Program Files (x86)\\PostgreSQL\\8.4\\bin\\pg_dump.exe");     // esse é meu caminho
      comandos.add("C:\\Program Files\\PostgresPlus\\8.4SS\\bin\\pg_dump.exe");  
      
       comandos.add("-i");    
       comandos.add("-h");    
       comandos.add("localhost");    
       comandos.add("-p");    
       comandos.add("5432");    
       comandos.add("-U");    
       comandos.add("postgres");    
       comandos.add("-F");    
       comandos.add("c");    
       comandos.add("-b");    
       comandos.add("-v");    
       comandos.add("-f");    
       
       comandos.add("c:\\bkp.txt");   // eu utilizei meu C:\ e D:\ para os testes e gravei o backup com sucesso.
       comandos.add("seu_banco");    
   
       ProcessBuilder pb = new ProcessBuilder(comandos);    
       
       pb.environment().put("PGPASSWORD", "sua_senha");            
       
       try {    
           final Process process = pb.start();    
   
           final BufferedReader r = new BufferedReader(    
               new InputStreamReader(process.getErrorStream()));    
           String line = r.readLine();    
           while (line != null) {    
           System.err.println(line);    
           line = r.readLine();    
           }    
           r.close();    
   
           process.waitFor();
           System.out.println("backup realizado com sucesso.");
   
       } catch (IOException e) {    
           e.printStackTrace();    
       } catch (InterruptedException ie) {    
           ie.printStackTrace();    
       }       
         
   }  	
	
	public static void main(String[] args) {
		try {
			PostgresBackup.realizaBackup();			
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	
}

Fáááááábio vc é d++++++++ brother!!!
rsrsrrs
Muito obrigado cara, funcionou legal mesmo…
Alterei aqui para minahs informações e funcionou…
Acho que eu não tinha colocado o nome do arquivo como vc fez…
Muito obrigado brother pela ajuda.
Um forte abraço!!!

Cara, eu tava dando uma ultima analisada e vi que ta faltando voce matar o processo, senao cada backup que rodar ele vai abrir um novo pg_dump.exe e manter em memoria

coloca isso emabixo da linha que aguarda o processo:

process.waitFor(); 
process.destroy(); // adicionar essa.

Olá amigo…
Cara, obrigado mesmo…
Eu add essa linha que vc comentou, nem tinha reparado nisso…
Mais uma vez, muito obrigado cara…
Um abraço

boa noite…
só me tira uma dúvida, ele demora mesmo para gerar o backup, fiz o teste com um banco com apenas uma tabela e esta demorando muito.

Se fez o backup localmente não deveria demorar nao.

BOA NOITE, PESSOAL
vi hj essa conversa de vcs sobre o postgres e java, seguinte estou começando nos 2 sou iniciante ainda rsrsrs
mas ja fiz um projeto de cadastros de usuários em java como netbeans e uso o postgres dae queria ver quem tem a aplicação pra fazer bkp do java , tipo eu fiz uma tela como um botão de bkp e um botão de restore, e um campo pra buscar o caminho e o arquivo de bkp …
mas não tenho o macete de fazer o codigo kk alguem poderia me dar help, se funcionar poderemos ate combinar um valor que eu pago estou precisando urgente caso precisar envio o meu projeto …