2010-09-28 18 views
6

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

Trả lời

6

Tại sao bạn không sử dụng pg_dump?

+0

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

+0

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 –

+0

Đ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

0

tôi sử dụng DbUnit để sao lưu cơ sở dữ liệu từ bên trong ứng dụng java của tôi:

DbUnit có khả năng xuất khẩu, nhập khẩu dữ liệu cơ sở dữ liệu của bạn đến và từ các bộ dữ liệu XML. Kể từ phiên bản 2.0, DbUnit cũng có thể làm việc với các bộ dữ liệu rất lớn khi được sử dụng trong chế độ phát trực tuyến.

+0

DbUnit không đổ SQL. Nhưng tôi không nói điều đó trong câu hỏi ban đầu. – boutta

+1

Liên kết được đề cập trong câu trả lời không hoạt động. – Blip

Các vấn đề liên quan