PostgreSQL 資料庫備份全攻略:4 種備份方法一次搞懂

擔心資料庫突然掛掉或資料誤刪嗎?其實只要做好備份就能安心一大半。本文不用艱澀的術語,直接帶您認識 4 種真正管用的 PostgreSQL 備份方法,讓您的資料從此多一份保障。

發佈者 Alicia2026年06月17日

為什麼需要備份 PostgreSQL 資料庫?

在數位化時代,資料可說是企業最核心的資產之一。對於使用 PostgreSQL 作為資料庫管理系統的使用者而言,建立一套完善的備份策略,絕對是不可忽視的關鍵任務。無論是硬體故障、人為疏失,還是資安威脅,都可能導致資料毀損或遺失,因此,PostgreSQL 備份資料庫是每一位資料庫管理員(DBA)或系統維運人員都必須熟練掌握的技能。

本文將深入探討 PostgreSQL 的各種備份方案,從基礎的 pg_dump 工具,到進階的自動化排程,以及結合雲端儲存服務的新興備份思維 MultCloud 的網站備份功能,為您打造全方位的 PostgreSQL 資料庫備份知識體系。

方法 1:用 pg_dump 進行邏輯備份

PostgreSQL 內建了一個叫做 pg_dump 的工具,專門用來做邏輯備份。這個工具不需要額外安裝,只要您安裝了 PostgreSQL,它就已經在您的電腦裡了。

pg_dump 的運作原理是:連線到資料庫,讀取所有資料表的結構和內容,然後產生一份 SQL 指令清單。這份清單就是您的備份檔案。並且,pg_dump 在備份過程中不會鎖定資料庫,其他人仍然可以正常讀寫資料,不影響日常運作。

在 pg_dump 工具中使用以下指令,您就能完成对 PostgreSQL 資料庫的備份。

pg_dump -U 使用者名稱 -h 主機位置 -p 連接埠 -d 資料庫名稱 > 備份檔案.sql

  • -U:使用者名稱
  • -h:主機位置
  • -p:連接埠
  • -d:資料庫名稱

如您要備份一個叫做「mydb」的資料庫,使用者是「postgres」,那么指令就如下所示:

pg_dump -U postgres -h 127.0.0.1 -p 5432 -d mydb > mydb_backup.sql

執行以上指令後,您就會得到一個「.sql」檔案,這就是您的備份檔了。這個檔案可以用任何文字編輯器打開來看,裡面密密麻麻的 SQL 指令就是您資料庫的全部內容。

邏輯備份是把資料庫裡的資料轉成 SQL 指令(也就是 CREATE TABLE、INSERT 這些資料庫聽得懂的語言),然後把 SQL 指令存成一個檔案。完成後,只要需要就能把資料庫還原回來。

此外,使用邏輯備份,無論您使用的是哪個版本的 PostgreSQL,只要執行這個 SQL 檔案,資料就能順利還原,且它不限版本與平台,最適合中小型資料庫,或是您需要選擇性備份(例如只備份某幾張表)的時候。

如果您的資料庫非常龐大(例如幾百 GB 甚至 TB 級別),邏輯備份就會花比較久的時間,而且還原時也需要從頭執行所有 SQL 指令,速度會比較慢。這時,建議您使用下面的方法。

方法 2:用 pg_basebackup 進行實體備份

pg_basebackup 是 PostgreSQL 官方提供的實體備份工具,屬於核心發行套件的一部分,無需額外安裝。它的設計目標是在資料庫處於運行狀態(線上備份)的情況下,產生一個完整的、時間點一致的基礎備份。

pg_basebackup 的運作基於 PostgreSQL 的 PITR(Point-In-Time Recovery) 架構。它利用資料庫的 WAL 日誌機制,確保在備份過程中即使有交易持續寫入,最終產生的備份仍然是事務一致的。

pg_basebackup 會在備份開始時記錄當前的 WAL 位置(LSN),然後複製所有資料檔案,最後再將備份期間產生的 WAL 日誌一併納入,保證備份的完整性。

✅ 基本指令語法與參數說明

pg_basebackup -D 輸出目錄 [選項參數]

參數 說明
-D 目錄 指定備份檔案的輸出目標路徑
-F p|t 輸出格式:p(plain,純目錄結構)或 t(tar,打包成 tar 壓縮檔)
-P 顯示備份進度資訊
-v 啟用詳細輸出模式(verbose)
-U 使用者 指定連線資料庫的使用者名稱
-h 主機 指定資料庫伺服器的主機位址
-p 連接埠 指定資料庫伺服器的連接埠號碼
-Z 0~9 壓縮等級(僅適用於 tar 格式),數字越大壓縮率越高
-R 產生 standby.signal 檔案,用於建立複製備援伺服器
-X stream|fetch 指定 WAL 日誌的傳輸方式,stream 為串流模式,fetch 為一次性提取

👉️ 如果您要將整個資料庫的實體檔案複製到 /pgdata/backup/base/ 目錄,並顯示詳細的進度訊息。指令如下:

pg_basebackup -D /pgdata/backup/base/ -F p -Pv -U postgres -h 127.0.0.1 -p 5432

👉️ 如果您要將資料庫壓縮生一個 tar 壓縮檔,指令如下:

pg_basebackup -D /pgdata/backup/ -F t -Pv -U postgres -h 127.0.0.1 -p 5432 -Z 5

👉️ 如果您想製作一個包含 WAL 日誌的完整備份,可以參考以下指令:

pg_basebackup -D /pgdata/backup/ -F t -X stream -Pv -U postgres -h 127.0.0.1 -p 5432

方法 3:使用 PITR 連續歸檔備份

前面兩種方法都只能讓您回到備份當下的狀態。如果在備份完成後,有新增了重要資料,但這部分資料還沒有進行備份就被刪除,該怎麼辦?別擔心。使用連續歸檔備份(也稱為 PITR,Point-In-Time Recovery),它除了能做一份完整的基礎備份之外,還會把資料庫每一次的變動記錄(稱為 WAL 日誌)都保留下來。

依照以下步驟連續備份資料庫

步驟 1. 啟用 WAL 歸檔

在 PostgreSQL 的設定檔 postgresql.conf 中,開啟歸檔功能:

  • archive_mode = on
  • archive_command = 'cp %p /歸檔目錄/%f'

步驟 2. 製作基礎備份

使用 pg_basebackup 做一份完整的基礎備份(參考方法 2

步驟 3. 保留所有 WAL 日誌

從基礎備份完成的那一刻起,所有產生的 WAL 日誌都要保留下來,這樣才能還原到任意時間點。

方法 4:使用 MultCloud 備份更輕鬆

以上三個方法都能讓您對 PostgreSQL 資料庫備份,但是透過以上操作,您應該很清楚的知道以上方法操作起來很複雜。如果您只是希望備份資料庫或伺服器,對WEB知識不是很了解,邏輯備份、實體備份、連續歸檔備份就不是很適合您。

此時,MultCloud 的網站備份功能就能派上用場了。MultCloud 原本是一款雲端硬碟整合工具,支援 Google Drive、Dropbox、OneDrive 等近 30 種雲端服務 。現在,它還支援網站備份與網站克隆,讓您能直接將一個網站中的數據與資料庫備份到指定的雲端硬碟。

  • 排程自動化:可設定定期備份,實現 PostgreSQL 自動備份。
  • 離線執行:任務在伺服器端執行,關機斷網也不影響。
  • 節省流量:備份檔案直接在雲端之間傳輸,不消耗本地頻寬。
  • 多種同步模式:提供完全備份、增量備份等多種選項。
  • 免費流量額度:註冊即可獲得 5GB 跨雲端傳輸流量。

1. 透過您的電子郵件免費註冊MultCloud。

2. 進入 MultCloud 後,點擊左側功能列表中的網站備份。

3. 點擊要備份的網站,然後在「新增網站檔案」、「新增資料庫」中添加您的【伺服器】、【用戶名】、【密碼】。

4. 點擊「備份儲存位置」添加儲存網站資料的雲端硬碟,如 Google 雲端硬碟。

5. 添加完成後,點擊立即備份並等待備份完成。

如果您想讓網站自動備份到Google雲端硬碟,可以點擊「排程」,設定自動備份時間。

與 PostgreSQL 資料庫備份相關的 FAQ

pg_dump 和 pg_basebackup 到底有什麼不同?我該選哪一個?
 
pg_dump 是把資料轉成 SQL 指令,pg_basebackup 是直接複製資料庫檔案。如果您的資料庫小於50GB、需要跨版本遷移,可以選用 pg_dump,如果資料庫大於100GB、且希望更快追求速度,可以選用 pg_basebackup。如果您是新手,更建議使用 MultCloud,它相比與 pg_dump 和 pg_basebackup,步驟更簡單,所需的專業知識也更少。
備份檔案要存哪裡比較安全?
 
不要只存在同一顆硬碟,始終遵循3-2-1 備份原則。可以先將備份檔案先存本地;然後定期複製到外接硬碟或 NAS,如果您覺得很費時間,可以使用 MultCloud 等工具自動上傳到雲端。
備份失敗最常見的原因是什麼?
 
  • connection refused:資料庫沒啟動或連線設定錯誤,可以檢查 PostgreSQL 服務狀態與連線參數。
  • no such database:指定的資料庫名稱不存在,使用 \l 指令確認資料庫名稱是否正確。
  • permission denied:使用者權限不足,建議使用超級使用者(postgres)或授予足夠權限。
  • disk full:硬碟空間不足,嘗試清理空間或更換儲存位置。
  • out of memory:資料庫記憶體不足,調整 shared_buffers 或分批備份。
  • timeout:備份時間過長,調整 timeout 參數或改用實體備份。
可以只備份某幾張資料表嗎?
 

可以的,使用 pg_dump 的 -t 參數就能做到。比如,您只想備份「訂單」和「會員」這兩張表,指令如下:

pg_dump -U postgres -d mydb -t 訂單 -t 會員 > 重要資料.sql

注意:如果您備份的資料表之間有外鍵關聯(FK),建議一併備份相關的資料表,否則還原時可能會因為關聯約束而失敗。

備份檔案太大了怎麼辦?
 

您可以使用 pg_dump 加上 -Fc 參數,自動壓縮備份檔案;也可以使用目錄格式 -Fd 將備份拆分成多個小檔案;或者清理備份;您還可以直接使用 MultCloud 進行備份,即使關閉電腦也能提前預約並自動進行備份。

備份時會影響正在使用資料庫的使用者嗎?
 

不會。pg_dump 使用 MVCC(多版本並行控制)機制,讀取的是備份啟動時的一致性快照,備份過程中其他使用者仍然可以正常讀寫資料庫。pg_basebackup 同樣支援線上備份,資料庫在備份過程中保持正常運作。

總結

想對 PostgreSQL 資料庫進行保護,防止意外丟失或刪除?可以嘗試本文提供的4種有效方案實行 PostgreSQL 資料庫備份。無論您是想使用最簡單的 pg_dump 邏輯備份、高速的 pg_basebackup 實體備份,還是具備時間點還原能力的 WAL 連續歸檔備份,甚至是結合雲端儲存的自動化備份方案,本文都能提供您完整的操作指引,幫助您根據自身需求打造最合適的資料保護策略。

Alicia · 作者
專注於雲端檔案管理與跨平台備份工具的中文化與推廣,希望透過清晰的文字與教學,幫助繁體中文使用者輕鬆掌握 MultCloud 的各種功能, 包括跨雲端搬移、同步、備份與合併等操作。無論您是個人用戶還是企業管理者,我都致力於提供實用、易懂的內容,讓您在多雲端世界中更有效率地工作與生活。