PostgreSQL 資料庫備份:兩種 .dump 導出方式的差異與建議

| SQL | 15 Reads

在日常維運 PostgreSQL 資料庫時,資料備份是不可或缺的一環,而 pg_dump 是官方提供的備份工具。本文將探討常見的兩種導出 .dump 檔案方式,並分析其格式、用途及優劣差異,幫助你選擇更合適的備份策略。


🧰 常見兩種導出寫法

✅ 方式一:純 SQL 格式(文字形式)

pg_dump -U <使用者> -d <資料庫名稱> -E UTF-8 > /path/to/backup/backup_name.dump
  • 使用 > 將標準輸出重定向為 .dump 檔案。

  • 未指定 -F 時,預設輸出為 純文字 SQL 格式(plain format)

  • 實際上這種 .dump 是一份 .sql 腳本,只是副檔名習慣上可能被寫為 .dump


✅ 方式二:自定義格式(Custom Format)

pg_dump -U <使用者> -F c -f /path/to/backup/backup_name.dump <資料庫名稱>
  • 使用 -F c 指定導出為 自定義格式(custom format)

  • 使用 -f 指定輸出檔案名稱。

  • 輸出為壓縮的 .dump 二進位格式,需使用 pg_restore 還原。


🧠 -F c 是什麼?

pg_dump 支援多種備份格式,透過 -F 參數指定格式:

參數 格式全名 說明
-F p plain 純文字 SQL 腳本(預設)
-F c custom ✅ 自定義格式(壓縮 + 支援選擇還原)
-F d directory 每個物件獨立輸出成目錄內的檔案
-F t tar tar 格式封裝(適合傳輸)

其中 -F c 是實務上最推薦的格式。


🧪 差異比較

項目 方式一:SQL 格式 (>) 方式二:自定義格式 (-F c)
輸出內容 純文字 SQL 腳本 ✅ 壓縮的二進位備份檔
還原方式 psql -f pg_restore(功能更強)
可選擇性還原 ❌ 不支援 ✅ 支援(可還原單表、單索引)
多執行緒支援 ❌ 無 ✅ 可用 pg_restore -j N
壓縮效果 無壓縮,檔案較大 ✅ 內建壓縮,檔案更小
可讀性 ✅ 可人工檢查 SQL 語句 ❌ 為二進位格式不可讀
適合場景 單次手動檢查或匯入 ✅ 正式備份、CI/CD、自動化流程

✅ 還原指令對應

SQL 格式的還原:

psql -U <使用者> -d <資料庫> -f backup.sql

自定義格式的還原(建議):

pg_restore -U <使用者> -d <資料庫> -c backup.dump

進階還原方式(多執行緒並行還原):

pg_restore -U <使用者> -d <資料庫> -c -j 4 backup.dump

✅ 實例:跨平台備份差異

假設你在 Linux 環境看到如下備份指令:

pg_dump -U dbuser -d sampledb -E UTF-8 > /var/lib/pgsql/sample_20240401.dump

這樣其實產出的是一份 SQL 腳本,而不是可以用 pg_restore 操作的 .dump 檔。

而在 Windows 上,如果你使用的是以下指令:

pg_dump -U dbuser -F c -f sample_20240401.dump sampledb

這樣才是真正的自定義格式備份,可以更安全、彈性地還原。


🔐 小技巧:避免密碼提示

在指令前設置環境變數可自動提供密碼:

PGPASSWORD=yourpassword pg_dump ...

也適用於 pg_restore


🧾 建議與結語

建議 說明
優先使用 -F c 自定義格式備份 兼顧安全、壓縮與還原彈性
不建議單純使用 > 重定向備份 .dump 容易誤導,實際是 SQL 檔案
定期測試還原流程 備份只是第一步,驗證還原才是真正保障
搭配 pg_restore 熟悉細節操作 -j 並行還原、-t 指定表、--schema 指定 schema 等

有了這些知識,你就能根據實際需求選擇正確的備份方式,確保 PostgreSQL 資料的完整與可靠。

This article was last edited at