Trong ứng dụng của chúng tôi, chúng tôi đã triển khai quá trình di chuyển DB tự động được kích hoạt từ bên trong mã của chúng tôi. Bây giờ chúng tôi muốn sao lưu DB hiện tại trước khi thực hiện bất kỳ di chuyển nào.Làm thế nào để sao lưu từ Postgresql-DB qua JDBC?
Bất cứ ai có thể giải thích cách thực hiện sao lưu đầy đủ của Postgresql-DB qua JDBC từ bên trong mã Java không?
Cập nhật: nó không hoạt động qua JDBC.
Dưới đây một số mã làm việc để phản ứng của 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();
}
Bởi vì khi tôi sử dụng ProcessBuilder để bắt đầu pg_dump, pg_dump không thể truy nhập tệp để ghi kết xuất vào: ( – boutta
Sau đó truyền đầu ra của pg_dump đến một vị trí khác. Pg_dump là phương pháp an toàn duy nhất để thực hiện sao lưu, tất cả những thứ khác (ngoại trừ PITR) Và họ thất bại tại thời điểm tồi tệ nhất poset –
Điều đó đã không làm việc hoặc. Nó chạy vào một đọc chặn.Tôi giải quyết vấn đề, xác định tên tập tin mà không có bất kỳ "hoặc". – boutta