Mục lục

1. Giới thiệu

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)

Đọc thêm  Export Import dữ liệu bằng pg_dump trong PostgreSQL

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

1. 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,b.pham@gmail.com,Thái Bình
3,Nguyễn Thị Na,2000-03-02,nant@gmail.com,Hà Nội
4,Lê Văn Tú,2001-05-03,tulv@gmail.com,Hà Nam
5,Nguyễn Trần Mai Anh,2000-03-02,maianh@gmail.com,Nghệ An
6,Ngô Văn Kiên,2001-05-03,kien.ngo@gmail.com,Quảng Ninh
7,Lại Thị Hải Yến,2000-03-02,yenlth@gmail.com,Thanh Hóa
8,Đặng Thùy Dung,2001-05-03,b.dungdt@gmail.com,Tuyên Quang
9,Lê Văn Cường,2000-03-02,cuonglv@gmail.com,Nam Định
10,Phạm Hải Anh,2001-05-03,anhph@gmail.com,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

2. 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

 

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

1. 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:

2. 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ả

3. 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/

Hiện tại, tôi có tổ chức đều đặn các khóa học về quản trị Oracle Database, tôi sẽ để thông tin ở đây, để bạn nào quan tâm về lịch học cũng như chương trình học có thể theo dõi nhé.

KHOÁ DÀNH CHO NGƯỜI MỚI

KHÓA HỌC: QUẢN TRỊ ORACLE DATABASE THẬT LÀ ĐƠN GIẢN (ADMIN 1)

CÁC KHOÁ NÂNG CAO:

KHÓA HỌC ORACLE NÂNG CAO: QUẢN TRỊ KIẾN TRÚC MULTITENANT 12c

KHÓA HỌC ORACLE NÂNG CAO: QUẢN TRỊ HỆ THỐNG DATA GUARD

CÁC KHOÁ COMBO:

COMBO 1: ADMIN 1 + MULTITENANT 12c

COMBO 2: ADMIN 1 + DATA GUARD

COMBO 3: ADMIN 1 + MULTITENANT 12c + DATA GUARD

LỊCH HỌC:

Mời bạn xem tại đây: LỊCH HỌC CÁC LỚP ORACLE 

ĐĂNG KÝ:

https://forms.gle/MtCAoRQFenP886y79

Hãy tham gia group “Kho tài liệu kiến thức database” để cùng học hỏi và chia sẻ nhé.

5 1 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận
0
Rất thích suy nghĩ của bạn, hãy bình luận.x