在我們的應用程序中,我們實現了從代碼中觸發的自動DB遷移。現在我們想在做任何遷移之前備份現有的數據庫。如何通過JDBC從Postgresql-DB執行備份?
誰能解釋如何從Java代碼中做通過JDBC一個PostgreSQL-DB的完整備份?
更新:它不通過JDBC工作。
下面一些工作代碼的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();
}
因爲當我使用的ProcessBuilder開始pg_dump的一樣,pg_dump無法訪問文件中寫入轉儲成:( – boutta 2010-09-28 13:49:56
然後pg_dump的輸出傳輸到另一個位置。pg_dump的是進行備份的唯一安全的方法,所有的人(除了PITR )會失敗,並且在最壞的時刻失敗 – 2010-09-28 14:21:38
這也沒有奏效,它遇到了阻塞讀取,我解決了這個問題,指定了沒有任何「或」的文件名。 – boutta 2010-09-28 14:37:51