Bài viết này sẽ mô tả cách sao chép cơ sở dữ liệu PostgreSQL trên cùng một máy chủ (server) hoặc từ máy chủ này sang máy chủ khác.
1. Sao chép cơ sở dữ liệu PostgreSQL trong cùng một máy chủ
Đôi khi, bạn muốn sao chép cơ sở dữ liệu PostgreSQL trong server cho mục đích thử nghiệm, kiểm tra truy vấn,… PostgreSQL có thể dễ dàng thực hiện điều này thông qua câu lệnh CREATE DATABASE như sau:
CREATE DATABASE tên_db_mới WITH TEMPLATE tên_db_nguồn;
Ví dụ, sao chép cơ sở dữ liệu sampledb sau:
thành cơ sở dữ liệu sampledb_test thì chúng ta sẽ sử dụng truy vấn:
CREATE DATABASE sampledb_test WITH TEMPLATE sampledb;
※Tùy thuộc vào kích thước của cơ sở dữ liệu nguồn, có thể mất một lúc để hoàn thành việc sao chép.
Xem danh sách cơ sở dữ liệu thì thấy sampledb_test đã được tạo với cấu trúc giống database nguồn sampledb
Trường hợp copy database bị lỗi do database nguồn đang được kết nối bởi user khác
Khi thực thi lệnh copy database hiện thông báo lỗi do database nguồn đang được kết nối bởi user khác:
thì trước khi copy database chúng ta cần disconnect database nguồn:
2. Sao chép cơ sở dữ liệu PostgreSQL từ máy chủ này sang máy chủ khác
Có một số cách để sao chép cơ sở dữ liệu giữa các máy chủ cơ sở dữ liệu PostgreSQL. Nếu kích thước của cơ sở dữ liệu nguồn lớn và kết nối giữa các máy chủ cơ sở dữ liệu chậm, bạn có thể kết xuất (dump) cơ sở dữ liệu nguồn vào một file .sql, sao chép file này vào máy chủ từ xa (remote server) và khôi phục nó.
Sau đây là 3 bước thực hiện:
#1/3:
Đầu tiên, kết xuất (dump) cơ sở dữ liệu nguồn vào một file .sql bằng lệnh có định dạng:
pg_dump -U "username" -h "IP / server name" -p "port_number" -d "database name" -W -f "path file sql"
Phần -h “IP / server name” -p “port_number” là option, có thể chỉ định hoặc không.
- Trường hợp chỉ muốn export schema thì thay tham số -W thành -s
- Trường hợp chỉ muốn export data thì thay tham số -W thành -a
Chúng ta sẽ thực hiện export cả schema và data của database sampledata ra file sql ở đường dẫn C:\Temp\sampledata.sql như sau:
#2/3:
Tiếp theo, tạo một cơ sở dữ liệu mới phía remote server, chẳng hạn là sampledata để copy dữ liệu vào:
CREATE DATABASE sampledata;
#3/3:
Ở bước cuối cùng này, chúng ta sẽ import file sql có được ở bước 1 vào cơ sở dữ liệu sampledata phía remote server đã tạo ở bước 2.
Bằng lệnh thực thi (★) có định dạng sau:
psql -U "username" -h "IP / server name" -p "port_number" -d "database name" -W -f "path file sql"
※Phần -h “IP / server name” -p “port_number” là option, có thể chỉ định hoặc không.
Có 2 cách import file sql vào cơ sở dữ liệu:
① Thực hiện tại máy remote server import dữ liệu của file sql vào database:
Copy file sql ở bước 1 vào máy remote server rồi thực hiện lệnh (★)
Phần -h “IP / server name” -p “port_number” là option, có thể chỉ định -h localhost -p 5432 hoặc không cần cũng được.
Ví dụ, thực hiện import file sql vào database sampledata ở đường dẫn C:\Temp\sampledata.sql tại máy remote server như sau:
② Thực hiện tại máy local import dữ liệu của file sql lên database của máy remote server:
Trường hợp thực hiện lệnh (★) tại máy local thì PHẢI chỉ định -h “IP / server name”, -p “port_number” nếu là port mặc định của PostgreSQL là 5432 thì không cần chỉ định cũng được.
Ví dụ, IP của máy remote server là 10.256.12.36 thì chúng ta có -h 10.256.12.36
Trường hợp từ máy local không thể kết nối đến máy remote server để copy database thì bạn xem thêm bài viết cách cấu hình PostgreSQL cho phía remote server.
– Cách cài đặt file postgresql.conf
– Cách cài đặt file pg_hba.conf
[…] Xem thêm bài viết sử dụng lệnh pg_dump để: Sao chép cơ sở dữ liệu PostgreSQL từ máy chủ này sang máy chủ khác […]