PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Khôi phục cơ sở dữ liệu PostgreSQL bằng java

Thật ngạc nhiên là lệnh bạn hiển thị hoàn toàn hoạt động, vì bạn không thể trích dẫn các khoảng trắng trong đường dẫn lệnh. Hãy thử:

String[] cmd = {
    "D:\\Program Files\\PostgreSQL\\9.1\\bin\\pg_restore.exe",
    "--host", "localhost",
    "--port", "5432",
    "--username", "postgres",
    "--dbname", "mytestqq",
    "--role", "postgres",
    "--no-password",
    "--verbose",
    "D:\\sathish\\rawDatabase.backup"
};
p = r.exec(cmd);

Các thay đổi:

  • Chuyển đổi dạng chuỗi đơn thành dạng mảng đối số an toàn hơn nhiều của exec cuộc gọi;
  • Gấp đôi các dấu gạch chéo ngược trong rawDatabase vì lệnh ban đầu của bạn không thoát được dấu gạch chéo ngược, vì vậy \r là một ký tự xuống dòng trong chuỗi thay vì \ char theo sau là r char.
  • Chuyển sang dấu gạch chéo ngược kép thay vì dấu gạch chéo ngược trên đường dẫn chương trình để có tính nhất quán. Thay đổi này có lẽ không thành vấn đề.

Đồng thời kiểm tra trạng thái trả lại của quá trình. Bạn phải sử dụng Process.waitFor() sau đó khi nó đã thoát sử dụng Process.exitValue() để xác định kết quả. Bạn nên kiểm tra stderr và stdout được Process ghi lại đối tượng cho lỗi và thông tin ghi nhật ký.

Lý do chương trình của bạn tiếp tục không hoạt động có thể là do:

  • Bạn có pg_restore cũ quy trình treo xung quanh việc giữ ổ khóa; và / hoặc
  • Bạn không sử dụng stdout và stderr nên pg_restore hết không gian ống được đệm và chặn việc ghi trên luồng đầu ra.

Tất cả điều này sẽ đơn giản hơn nhiều nếu bạn sử dụng ProcessBuilder thay vào đó . ProcessBuilder cho phép bạn cung cấp các luồng tệp để ghi đầu ra và thường đảm nhận rất nhiều việc này cho bạn. Tuy nhiên, bạn vẫn phải đợi quá trình kết thúc và kiểm tra mã trả lại của nó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mức cô lập CÓ THỂ XỬ LÝ TRONG Spring-JDBC

  2. Phần 2:Cách lấy Tổng của một truy vấn dựa trên phân vùng mà không thực sự xoay vòng

  3. JPA 2.1 StoredProcedureQuery với PostgreSQL và REF_CURSORs

  4. postgres không biết tìm tệp cấu hình máy chủ ở đâu

  5. Trạng thái SQL:42883, Không có hàm nào phù hợp với các kiểu đối số và tên đã cho. Nhưng chức năng đó thực sự tồn tại