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)
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)
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ả
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 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é.