想像一下,有人寄給你一個關於學生的 CSV 檔案,可能是從別的資料庫或外部應用程式來的。要一筆一筆手動複製?拜託,才不要咧!這時候資料大量匯入就派上用場啦。
這裡有幾個你會超需要大量匯入的情境:
- 資料遷移:要把資料從一個系統搬到另一個。例如從 Excel 或其他資料庫搬到 PostgreSQL。
- 資料庫初始化:幫你的資料庫塞入初始資料,比如城市清單、課程或商品分類。
- 跟外部系統整合:定期加新資料,比如透過檔案更新第三方資料。
- 大量資料更新:要把舊資料換成新的。
到這裡都 OK 嗎?如果沒問題,我們繼續!
資料大量匯入的主要方法
在進入細節前,先來聊聊有哪些方法可以一次加很多資料到資料庫,不是只加一兩筆。我們會先看怎麼用 SQL 指令做,然後再看更方便現代的方式——從檔案匯入。
用 SQL 指令插入資料
你應該已經知道,新增資料可以用 INSERT INTO 指令。這招對少量資料超好用。例如:
INSERT INTO students (id, name, age, course)
VALUES (1, 'Otto Lin', 20, '程式設計');
但如果你要加幾十、幾百、甚至幾千筆,這方法就超沒效率。當然可以在程式裡自動化,但手動維護這麼多 insert 真的很累又麻煩。
從檔案匯入
所以大家常用從檔案匯入資料,像是 CSV(Comma-Separated Values)。這是一種很簡單的純文字格式,每一行就是一筆資料,欄位用逗號或分號分開。
CSV 檔案內容範例:
id,name,age,course
1,Otto Lin,20,程式設計
2,Maria Chi,21,設計
3,Alex Ming,19,數學
這種格式人看得懂,程式也能處理。CSV 可以用 Excel 開、用 Python 或其他語言處理,也能輕鬆匯入資料庫。從檔案大量匯入資料比手動 insert 快超多,也比較不會出錯。
大量匯入前的準備
大量匯入成功的祕訣就是準備。你要讓資料庫準備好接收資料,還要檢查結構和資料是不是正確。
檢查資料表結構
首先,確定你的資料庫有一個跟檔案結構對得上的資料表。例如你要匯入學生資料,就要有一個對應欄位的資料表。
學生資料匯入用的資料表範例:
CREATE TABLE students (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER NOT NULL,
course TEXT
);
重點:
- 確定欄位的資料型態跟檔案裡的資料一致。如果
age是數字,那 CSV 裡那欄也只能放數字。 - 有設限制的欄位(
NOT NULL、UNIQUE)要特別小心資料準備。
檢查資料內容
再來簡單說說資料本身。匯入前要檢查這些:
- 沒有空白行或不正確的值。 例如這行:
12,,20,程式設計會出錯,因為name是必填欄位。
分隔符號要對。 如果你的 CSV 用逗號(
,),要確定設定正確。如果用分號(;),匯入時要特別指定。編碼。 PostgreSQL 只吃 UTF-8。如果你的檔案是其他編碼(像 Windows-1251),要先轉換。
來個小程式設計師笑話放鬆一下
為什麼工程師這麼愛用 CSV?因為搞了一整天 JSON,終於看到「簡單」的資料了……直到遇到文字裡的逗號。
大量匯入的實際應用
在實際專案裡,大量匯入超常見。像是:
- 更新網路商店的商品目錄。幾千筆商品的 CSV 檔,幾秒就匯完。
- 把客戶從一個 CRM 系統搬到另一個。所有客戶、地址、訂單資料都從 CSV 匯進 PostgreSQL。
- 做分析時,要匯入一個月的銷售資料來分析。
現在你已經知道為什麼要這樣做、怎麼準備,接下來我們就可以進入更實際的匯入工具,比如 COPY 指令。不過這個我們下堂課再說啦。
GO TO FULL VERSION