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();
}
Perché quando uso ProcessBuilder per avviare pg_dump, pg_dump non può accedere al file per scrivere il dump in :( – boutta
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, –
, che non ha funzionato, si è verificato in una lettura bloccante, ho risolto il problema specificando il nome file senza "o". – boutta