Hướng dẫn import export bằng pg_dump

   pg_dump là gì?

pg_dump là một công cụ dùng để backup PostgreSQL database. Đây là 1 công cụ bạn sẽ chạy ở trên hệ điều hành, chứ không phải câu lệnh SQL.

Bản backup database của pg_dump là một bản backup nhất quán (consistent backup), có nghĩa nó là dữ liệu của database tại thời điểm chạy câu lệnh pg_dump.

Để hiểu rõ hơn về consistent backup, mời bạn xem bài viết sau:

Đọc thêm  Các thuật ngữ thường dùng trong chiến lược backup database
.

Trên thực tế, những bản backup kiểu này, anh em DBA hay gọi là bản dump hay bản export. Nó đều để chỉ 1 kiểu backup thôi. Như vậy, từ giờ trở đi, tôi sử dụng từ export hay dump thì các bạn hiểu đó là bản backup bằng pg_dump nhé.


   Đặc điểm của pg_dump

   Trong quá trình hoạt động, pg_dump không ngăn cản người dùng khác truy cập vào database. Người dùng vẫn làm việc với database một cách bình thường.

   pg_dump chỉ có khả năng backup 1 database trên mỗi lần chạy. Nếu bạn muốn backup toàn bộ cluster thì pg_dumpall sẽ là giải pháp.

   pg_dumpall sử dụng để backup toàn bộ database cluster, bao gồm: database, role, tablespace,…

   Định dạng file kết xuất của pg_dump có thể là dạng SQL script hoặc dạng archive.

   Với dạng SQL script, nội dung được kết xuất ra là những câu lệnh SQL để tạo ra đối tượng và sinh ra dữ liệu (VD: CREATE TABLE, INSERT INTO …). Các câu lệnh trong đó đều theo chuẩn SQL cả. Bạn có thể sử dụng psql hay bất cứ tool nào có thể kết nối với PostgreSQL và chạy được câu lệnh SQL là có thể khôi phục dữ liệu được. Ngoài ra, các bạn còn có thể sử dụng script này, kèm theo một chút chỉnh sửa để có thể sử dụng ở 1 RDBMS khác được.

   Với định dạng archive file (tar file), bạn phải dùng câu lệnh pg_restore để khôi phục lại dữ liệu.

Trong bài viết này, tôi sẽ hướng dẫn các bạn cách export/import dữ liệu cơ bản bằng pg_dump. Những cách trên thường chỉ áp dụng nhanh đối với database cỡ nhỏ hoặc database test, mục đích của nó để các bạn làm quen với công cụ đã. Trên thực tế, tôi sẽ sử dụng một số các option nâng cao hơn. Hẹn các bạn ở một bài viết khác, tôi sẽ trình bày kỹ hơn về các tình huống thực tế và cách mà tôi sử dụng.


   Cách sử dụng pg_dump

Mẫu cú pháp của pg_dump như sau:

pg_dump [connection-option…] [option…] [dbname]

Trong đó:

  connection-option: Là các tham số để kết nối đến database

  option: Là các tùy chọn bạn muốn sử dụng với bản backup (VD: loại file là SQL hay archive file).

  dbname: Là tên database cần backup.


   Thực hành Export dữ liệu sử dụng pg_dump

Giả sử bây giờ tôi có 1 database có tên là test. Tôi muốn export dữ liệu trong database đó ra.

  Export database trên localhost

pg_dump test > test.sql

Kết quả, tôi sẽ được 1 file SQL bao gồm các câu lệnh để khôi phục lại database test. Dưới đây là một phần nội dung của file:

  Export database trên một server khác

Bạn có thể dùng pg_dump để export một database trên server khác. Chú ý: Bạn cần cấu hình để pg_dump có thể kết nối đến server đó được, tham khảo cách làm trong bài viết:

Đọc thêm  Cấu hình để kết nối với PostgreSQL từ bên ngoài
Đọc thêm  Cấu hình kết nối trong PostgreSQL với pg_hba.conf
pg_dump -h 172.17.0.1 -p 5432 -U postgres test> test.sql

Trong đó:

   -h: Chỉ ra IP của server chứa PostgreSQL

   -p: Chỉ ra port mà PostgreSQL sử dụng.

   -u: Chỉ ra user sử dụng để kết nối đến PostgreSQL

  Export dữ liệu theo định dang tar file

pg_dump -Ft test > test.tar

   Thực hành Import dữ liệu

Với file export ra dưới định dạng SQL, bạn có thể dùng các công cụ như psql, pgadmin, DBeaver để đọc file và restore dữ liệu.

Đầu tiên bạn phải tạo database đích trước (nếu chưa có)

create database test;

Sau đó, dùng psql để import bằng cách gọi đến file test.sql

psql -d test -f test.sql > import_test.log

Chú ý:

  Option -d để chỉ database đích cần import vào

  Mệnh đề: > import_test.log để ghi thông tin quá trình import ra 1 file log. Trong tình huống có lỗi phát sinh, chúng ta có thể xem lại trong file import_test.log đó.

Nguồn: https://dangxuanduy.com/

Xin cho tôi được biết, bạn cảm thấy bài viết này như thế nào? Ý kiến của bạn sẽ giúp tôi nâng cao chất lượng bài viết của mình.

    Hãy chia sẻ bài viết này nếu bạn thấy có ích nhé
    0 0 votes
    Article Rating
    Subscribe
    Notify of
    guest
    0 Comments
    Inline Feedbacks
    View all comments