資料庫

PostgreSQL 資料庫匯出 CSV 檔案至 Excel 教學與範例

介紹如何在 PostgreSQL 資料庫中使用 COPY 指令匯出資料表或查詢結果至 CSV 檔案。

測試用資料

建立一張儲存學生成績用的 grades 資料表:

-- 建立 grades 資料表
CREATE TABLE grades (
  id SERIAL PRIMARY KEY, -- 序號
  name VARCHAR(255),     -- 名字
  score_a SMALLINT,      -- 成績 A
  score_b SMALLINT,      -- 成績 B
  score_c SMALLINT       -- 成績 C
);

插入一些學生成績的資料:

-- 插入測試資料
INSERT INTO grades (name, score_a, score_b, score_c)
  VALUES ('Jake', 99, 87, 84), ('Harry', 79, 81, 94),
         ('Robert', 92, 67, 54), ('Michael', 91, 97, 74);

查詢 grades 資料表中的資料:

-- 查詢 grades 資料表內容
SELECT * FROM grades;
 id |  name   | score_a | score_b | score_c
----+---------+---------+---------+---------
  1 | Jake    |      99 |      87 |      84
  2 | Harry   |      79 |      81 |      94
  3 | Robert  |      92 |      67 |      54
  4 | Michael |      91 |      97 |      74
(4 rows)

這張表格中的每一筆資料就是每一位學生的三次考試成績。

匯出資料表

若要將 PostgreSQL 資料庫中的資料表匯出為 CSV 檔案,可以使用 COPY 指令。

例如若要將 grade 資料表匯出為 /tmp/grades.csv,則可執行:

-- 將 grades 資料表匯出為 CSV 檔案
COPY grades TO '/tmp/grades.csv' DELIMITER ',' CSV HEADER;

這裡的 DELIMITER ',' 是指定以逗號作為分隔字元,而 CSV HEADER 則代表以含有標題列的 CSV 格式匯出資料。

匯出的 CSV 檔案內容會像這樣:

id,name,score_a,score_b,score_c
1,Jake,99,87,84
2,Harry,79,81,94
3,Robert,92,67,54
4,Michael,91,97,74

匯出查詢結果

COPY 指令也可以用來將查詢的結果匯出為 CSV 檔案。

假設我們有興趣以下查詢的結果:

-- 根據三次成績的最高分來排序
SELECT * FROM grades ORDER BY GREATEST(score_a, score_b, score_c) DESC;
 id |  name   | score_a | score_b | score_c
----+---------+---------+---------+---------
  1 | Jake    |      99 |      87 |      84
  4 | Michael |      91 |      97 |      74
  2 | Harry   |      79 |      81 |      94
  3 | Robert  |      92 |      67 |      54
(4 rows)

若要將上面的查詢結果匯出為 CSV 檔案,只要將查詢指令整個包起來,放進 COPY 的指令中即可:

-- 將查詢結果匯出為 CSV 檔案
COPY (
  SELECT * FROM grades ORDER BY GREATEST(score_a, score_b, score_c) DESC
  ) TO '/tmp/query_result.csv' DELIMITER ',' CSV HEADER;

輸出的 CSV 檔案內容為:

id,name,score_a,score_b,score_c
1,Jake,99,87,84
4,Michael,91,97,74
2,Harry,79,81,94
3,Robert,92,67,54

壓縮匯出 CSV 檔

COPY 指令可以將資料導向至外部程式,我們可以藉由這樣的方式,將資料進行壓縮之後再儲存:

-- 將匯出的 CSV 資料進行 GZIP 壓縮後再儲存
COPY grades TO PROGRAM 'gzip > /tmp/grades.csv.gz' DELIMITER ',' CSV HEADER;

參考資料

Share
Published by
Office Guide
Tags: PostgreSQL

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago