pg_dump là một công cụ dòng lệnh do PostgreSQL cung cấp, cho phép xuất cơ sở dữ liệu ra file backup. File này có thể chứa chỉ cấu trúc database, chỉ dữ liệu, hoặc cả hai.
Điểm mạnh chính của pg_dump là nó cho phép chuyển dữ liệu giữa các server, khôi phục database sau khi bị lỗi hoặc đơn giản là tạo archive để lưu trữ lâu dài. Lưu ý là tiện ích này phù hợp hơn cho backup logic (dùng các truy vấn SQL) thay vì copy vật lý các file database.
Cú pháp cơ bản của lệnh pg_dump
Để tạo bản sao lưu bằng pg_dump, chỉ cần chạy lệnh sau trong terminal:
pg_dump -U username -d database_name -f backup_file.sql
Giải thích các thành phần của lệnh:
-U username— chỉ định tên user PostgreSQL dùng để kết nối tới database.-d database_name— đặt tên database mà bạn muốn backup.-f backup_file.sql— xác định nơi lưu file backup. Có thể là đường dẫn đầy đủ hoặc tương đối.
Ví dụ: giả sử bạn có database university và muốn tạo bản backup vào file university_backup.sql. Lệnh sẽ như sau:
pg_dump -U postgres -d university -f university_backup.sql
Lúc này PostgreSQL sẽ hỏi mật khẩu của user postgres để cho phép truy cập dữ liệu.
Mẹo: nếu bạn làm việc với server local và không muốn nhập mật khẩu mỗi lần, hãy cấu hình file .pgpass. Đọc thêm tài liệu chính thức của PostgreSQL để biết hướng dẫn chi tiết.
Tham số và cách sử dụng
Tiện ích pg_dump rất linh hoạt và có thể cấu hình để tạo backup với nhiều tuỳ chọn khác nhau:
- Tạo backup chỉ cấu trúc database
Nếu bạn chỉ muốn lưu cấu trúc database (ví dụ để triển khai trên server mới), dùng flag --schema-only. Ví dụ lệnh:
pg_dump -U postgres -d university --schema-only -f university_schema.sql
Lệnh này sẽ tạo script SQL chỉ chứa các lệnh CREATE TABLE, CREATE INDEX v.v., không có dữ liệu.
- Tạo backup chỉ dữ liệu
Đôi khi bạn chỉ cần lưu dữ liệu, không cần cấu trúc. Khi đó dùng flag --data-only:
pg_dump -U postgres -d university --data-only -f university_data.sql
File kết quả sẽ chứa các lệnh INSERT INTO để khôi phục dữ liệu của bạn.
- Nén bản sao lưu
File backup tạo ra có thể khá lớn, nhất là khi database có nhiều bảng và dữ liệu. Để giảm kích thước file, dùng tham số --compress:
pg_dump -U postgres -d university -f university_backup.sql --compress=6
Mức nén được chỉ định bằng số từ 0 (không nén) đến 9 (nén tối đa). Lưu ý mức nén cao hơn sẽ tốn nhiều thời gian backup hơn.
- Xuất ra định dạng nhị phân
Nếu bạn muốn khôi phục nhanh hơn, có thể lưu backup ở định dạng nhị phân thay vì script SQL dạng text:
pg_dump -U postgres -d university -Fc -f university_backup.dump
Tham số -Fc chỉ định định dạng Custom, hỗ trợ khôi phục bằng tiện ích pg_restore.
Ví dụ tạo bản sao lưu
Backup toàn bộ database
Giả sử bạn có database company và muốn backup toàn bộ, gồm cả cấu trúc lẫn dữ liệu:
pg_dump -U postgres -d company -f company_backup.sql
Backup một bảng
Nếu bạn chỉ muốn lưu một bảng từ database, dùng tham số -t:
pg_dump -U postgres -d company -t employees -f employees_backup.sql
File này sẽ chứa cấu trúc và dữ liệu chỉ của bảng employees.
Backup nhiều bảng
Để backup nhiều bảng, thêm nhiều tham số -t:
pg_dump -U postgres -d company -t employees -t departments -f selected_tables_backup.sql
Backup đã nén
Để tiết kiệm dung lượng, dùng flag --compress hoặc tạo file ở định dạng nén luôn:
pg_dump -U postgres -d company -Fc -f company_backup_compressed.dump
Một số khuyến nghị hữu ích
Kiểm tra kích thước file backup. Nếu file backup quá nhỏ, có thể đã xảy ra lỗi. Dùng tham số --verbose để xem thông tin chi tiết về quá trình backup.
Tự động hóa quá trình. Dùng cron hoặc pg_cron để lên lịch backup định kỳ. Đừng quên xoay vòng backup cũ đúng cách để tránh đầy ổ cứng.
Kiểm tra bản sao lưu có hợp lệ không. Hãy test backup bằng cách khôi phục database trên server test.
Lỗi bạn có thể gặp phải
Lỗi xác thực. Nếu bạn nhập sai user hoặc quên mật khẩu, pg_dump sẽ báo lỗi. Đảm bảo đã cấu hình file .pgpass để tự động đăng nhập.
Lỗi kết nối. Nếu server PostgreSQL chưa chạy hoặc bạn nhập sai tên database, tiện ích sẽ không thể tạo backup. Kiểm tra lại tên database và trạng thái server.
Vấn đề quyền truy cập. User mà bạn dùng để chạy pg_dump phải có quyền đọc cấu trúc và dữ liệu database. Nếu được, hãy dùng role admin.
GO TO FULL VERSION