Lệnh pg_restore trong PostgreSQL được sử dụng để phục hồi dữ liệu từ các tệp sao lưu mà đã được tạo ra bằng công cụ pg_dump. Lệnh này cho phép bạn khôi phục cơ sở dữ liệu từ một tệp sao lưu định dạng “custom”, “directory”, hoặc “tar”. Dưới đây là chi tiết về cách hoạt động của pg_restore:

Cú pháp cơ bản

pg_restore [options] backup_file

Các tùy chọn phổ biến

  • -d dbname: Tên cơ sở dữ liệu mà bạn muốn phục hồi vào.
  • -U username: Tên người dùng PostgreSQL để kết nối.
  • -h host: Địa chỉ máy chủ PostgreSQL.
  • -p port: Cổng kết nối tới PostgreSQL (mặc định là 5432).
  • -c: Xóa các đối tượng trước khi phục hồi (clean).
  • -v: Hiển thị thông tin chi tiết trong quá trình phục hồi (verbose).
  • -j num_jobs: Sử dụng đa luồng để phục hồi (tùy chọn này chỉ áp dụng cho định dạng “directory”).
  • --schema=schema_name: Chỉ phục hồi các đối tượng trong một schema cụ thể.
  • --data-only: Chỉ phục hồi dữ liệu, không phục hồi cấu trúc bảng.
  • --schema-only: Chỉ phục hồi cấu trúc bảng, không phục hồi dữ liệu.

Ví dụ sử dụng

Phục hồi toàn bộ cơ sở dữ liệu

Giả sử bạn có một tệp sao lưu tên là backup.dump và bạn muốn phục hồi vào cơ sở dữ liệu mydb:

pg_restore -U myuser -d mydb backup.dump

Phục hồi chỉ cấu trúc bảng

Nếu bạn chỉ muốn phục hồi cấu trúc của cơ sở dữ liệu mà không cần dữ liệu, bạn có thể sử dụng tùy chọn --schema-only:

pg_restore -U myuser -d mydb --schema-only backup.dump

Phục hồi với thông tin chi tiết

Để thấy thông tin chi tiết về quá trình phục hồi, bạn có thể thêm tùy chọn -v:

pg_restore -U myuser -d mydb -v backup.dump

Cách hoạt động của pg_restore

  1. Kết nối đến cơ sở dữ liệu: pg_restore sẽ kết nối đến cơ sở dữ liệu mà bạn chỉ định với các thông tin xác thực (tên người dùng, mật khẩu, máy chủ, cổng, v.v.).
  2. Phân tích tệp sao lưu: Tệp sao lưu được phân tích để xác định các đối tượng dữ liệu (bảng, chỉ mục, ràng buộc, v.v.) và dữ liệu sẽ được phục hồi.
  3. Thực hiện các lệnh SQL: Dựa trên thông tin từ tệp sao lưu, pg_restore sẽ thực hiện các lệnh SQL để tạo lại cấu trúc của các bảng và đối tượng khác trong cơ sở dữ liệu, sau đó chèn dữ liệu vào các bảng đó.
  4. Xử lý xung đột: Nếu bạn sử dụng tùy chọn -c, pg_restore sẽ xóa các đối tượng đã tồn tại trước khi phục hồi. Nếu không, pg_restore sẽ tạo các đối tượng mới nếu chúng không tồn tại, hoặc bỏ qua nếu chúng đã tồn tại.
  5. Kết thúc: Sau khi hoàn tất quá trình phục hồi, pg_restore sẽ thông báo kết quả và đóng kết nối đến cơ sở dữ liệu.

Kết luận

pg_restore là một công cụ mạnh mẽ trong PostgreSQL cho phép bạn phục hồi cơ sở dữ liệu từ các tệp sao lưu. Với nhiều tùy chọn linh hoạt, bạn có thể kiểm soát quá trình phục hồi để phù hợp với nhu cầu của mình, cho phép phục hồi toàn bộ hoặc chỉ một phần của cơ sở dữ liệu.