Bạn đã bao giờ có nhu cầu muốn chuyển dữ liệu từ PostgreSQL sang một hệ quản trị CSDL khác?

Một trong những giải pháp có thể giúp ích cho bạn trong tình huống này đó là: Export dữ liệu từ PostgreSQL ra csv và import vào 1 hệ quản trị CSDL khác có hỗ trợ csv

Trên thực tế, lưu dữ liệu ra file csv là một cách khá tốt để di chuyển dữ liệu qua lại giữa các môi trường khác nhau (rất nhiều RDBMS hỗ trợ định dạng csv này).

Trong bài viết này, tôi sẽ hướng dẫn các bạn cách import file csv vào database PostgreSQL và ngược lại (export dữ liệu trong PostgreSQL ra csv)


   Import dữ liệu từ file csv vào database

   Giới thiệu file đầu vào

Giả sử bây giờ tôi có một file student_data.csv như sau:

id,name,birthday,email,city
1,Nguyễn Văn Ánh,2000-03-02,,Hà Nội
2,Phạm Văn Bách,2001-05-03,[email protected],Thái Bình
3,Nguyễn Thị Na,2000-03-02,[email protected],Hà Nội
4,Lê Văn Tú,2001-05-03,[email protected],Hà Nam
5,Nguyễn Trần Mai Anh,2000-03-02,[email protected],Nghệ An
6,Ngô Văn Kiên,2001-05-03,[email protected],Quảng Ninh
7,Lại Thị Hải Yến,2000-03-02,[email protected],Thanh Hóa
8,Đặng Thùy Dung,2001-05-03,[email protected],Tuyên Quang
9,Lê Văn Cường,2000-03-02,[email protected],Nam Định
10,Phạm Hải Anh,2001-05-03,[email protected],Hải Dương

   Cấu trúc của file csv này như sau:

   Dòng 1 là tên các cột (header)

   Từ dòng 2 trở đi là các dòng dữ liệu, dữ liệu cho mỗi ô được phân cách nhau bởi dấu “,”

Tôi cần import file dữ liệu này vào trong database. Đầu tiên tôi cần tạo 1 bảng để lưu dữ liệu này trước đã. Lưu ý, các cột trong bảng có tên giống với tên cột trong dòng header của file csv.

CREATE TABLE public.students (
id int NULL,
name varchar(50) NULL,
birthday date NULL,
email varchar NULL,
city varchar NULL,
gender varchar null
);

(Bạn chú ý, bảng này tôi tạo tạo thừa 1 cột so với file student_data.csv, đó là cột gender)

Đọc thêm  Kết nối vào server Linux bằng ssh tool

   Import dữ liệu vào bảng

Để import dữ liệu từ file csv vào bảng, tôi dùng câu lệnh COPY (Bạn có thể sử dụng lệnh này bằng psql, pgadmin hay bất cứ công cụ gì có thể kết nối với PostgreSQL)

COPY students FROM 'C:\Data\student_data.csv' DELIMITER ',' CSV HEADER;

Câu lệnh trên có ý nghĩa:

   Lấy dữ liệu từ file student_data.csv tại đường dẫn C:\Data và insert vào bảng students

   Các mệnh đề tiếp sau để mô tả file csv đầu vào:

   Mệnh đề DELIMITER ‘,’ nhằm chỉ ra dấu phẩy sẽ là dấu phân cách giữa các ô dữ liệu.

   Mệnh đề CSV để chỉ ra file đầu vào là định dạng csv

   Mệnh đề HEADER để chỉ ra dòng đầu tiên trong file csv là tên các cột dữ liệu. Nếu file của bạn không có header thì không cần mệnh đề này trong câu lệnh COPY.

Tuy nhiên, khi bạn chạy thử câu lệnh này, bạn sẽ gặp lỗi như sau:

SQL Error [22P04]: ERROR: missing data for column "gender"
  Where: COPY students

Nguyên nhân là do file csv đầu vào không có cột gender, trong khi bảng students lại có. Do đó, bạn cần phải chỉ đích danh ra những cột của bảng sẽ lấy dữ liệu từ file csv. Chúng ta sửa lại câu lệnh như sau:

COPY students (id, name, birthday, email, city) FROM 'C:\Data\student_data.csv' DELIMITER ',' CSV HEADER;

Kiểm tra lại kết quả

bảng dữ liệu student


   Export dữ liệu từ bảng ra file csv

    Export toàn bộ dữ liệu trong bảng

Bây giờ tôi sẽ export dữ liệu từ một bảng dữ liệu đã có ra file csv

Cú pháp để export toàn bộ dữ liệu trong bảng ra file csv như sau:

COPY students to 'C:\Export\student_data_full.csv' DELIMITER ',' CSV HEADER;

Có vẻ khá tương đồng với câu lệnh import nhỉ, chỉ khác ở từ khóa FROM giờ đã biến thành TO

Kết quả sau khi chạy câu lệnh COPY như sau:

    Export một số cột trong bảng

Giả sử giờ tôi chỉ muốn export một số cột trong bảng thôi, tôi sẽ chỉ ra danh sách các cột mà tôi muốn export

COPY students (id, name) to 'C:\Export\student_data_1.csv' DELIMITER ',' CSV HEADER;

Kiểm tra lại kết quả

    Export kết quả của câu truy vấn

Bạn cũng hoàn toàn có thể export dữ liệu từ một câu lệnh select ra file csv.

COPY (select id, name from students where city='Hà Nội') to 'C:\Data\student_data_2.csv' DELIMITER ',' CSV HEADER;

Kiểm tra lại kết quả

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é
    5 1 vote
    Article Rating
    Subscribe
    Notify of
    guest
    0 Comments
    Inline Feedbacks
    View all comments