2010-09-28 19 views
6

Nella nostra applicazione, abbiamo implementato una migrazione automatica dei DB attivata dal nostro codice. Ora vogliamo eseguire il backup del DB esistente prima di eseguire qualsiasi migrazione.Come eseguire un backup da un DB Postgresql tramite JDBC?

Qualcuno può spiegare come eseguire un backup completo di un Postgresql-DB tramite JDBC dal codice Java?

Aggiornamento: non funziona tramite JDBC.

Qui po 'di codice di lavoro per la risposta dei Frank Heikens:

final List<String> baseCmds = new ArrayList<String>(); 
    baseCmds.add("/usr/bin/pg_dump"); 
    baseCmds.add("-h"); 
    baseCmds.add("hostname"); 
    baseCmds.add("-p"); 
    baseCmds.add("5432"); 
    baseCmds.add("-U"); 
    baseCmds.add("username"); 
    baseCmds.add("-b"); 
    baseCmds.add("-v"); 
    baseCmds.add("-f"); 
    baseCmds.add("/path/to/backup.sql"); 
    baseCmds.add("dbName"); 
    final ProcessBuilder pb = new ProcessBuilder(baseCmds); 

    // Set the password 
    final Map<String, String> env = pb.environment(); 
    env.put("PGPASSWORD", "password"); 

    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(); 
    } 

risposta

6

Perché non usi pg_dump?

+0

Perché quando uso ProcessBuilder per avviare pg_dump, pg_dump non può accedere al file per scrivere il dump in :( – boutta

+0

Quindi riversare l'output di pg_dump in un'altra posizione.pg_dump è l'unico metodo sicuro per eseguire un backup, tutti gli altri (eccetto PITR falliranno nel loro peggiore momento possibile, –

+0

, che non ha funzionato, si è verificato in una lettura bloccante, ho risolto il problema specificando il nome file senza "o". – boutta

0

Io uso DbUnit per il backup di un database da dentro il mio applicazione java:

DBUnit ha la capacità di esportare e importare i dati del database da e verso i set di dati XML. Dalla versione 2.0, DbUnit può funzionare anche con dataset di grandi dimensioni se utilizzato in modalità streaming.

+0

DbUnit non esegue il dump di SQL. Ma non l'ho detto nella domanda originale. – boutta

+1

Il collegamento indicato nella risposta non funziona. – Blip

Problemi correlati