(本文章原始記錄於 2010 年 5 月 24 日)

******* 檔案系統層級的備份 *******

資料庫系統的所有資料存在於檔案系統中,而 PostgreSQL Cluster 的資料是放在 initdb 時,設定 -D 選項所指定的目錄中(例如 <postgresql目錄>/data),因此要將整個 Cluster 備份的話,就是將整個 data 的目錄包裝成一個檔案。
Unix 系統通常用 tar,而 Windows 系統則用 zip 壓縮程式將整個目錄包裝成一個檔案。

根據說明文件 24.2 提到,檔案系統層級的備份有兩個限制:

  1. 為了得到有效的備份,必須先關閉 Cluster 後再備份。系統可以暫時拒絕所有使用者連線,但是實際上可能還有些資料存在緩衝區中,尚未寫入檔案系統,所以若未先將 Cluster 關閉而進行備份的話,備份的資料可能不完整,因此一定要先完全關閉 Cluster 再備份才行。反之,還原時也是要先關閉 Cluster 才行,無法在 Cluster 運作中直接將檔案覆蓋回去。
  2. 就算知道哪一些目錄或檔案代表某些資料庫或其他記錄,也無法只備份某些特定資料。
    因為檔案只記錄部份訊息,另一部份訊息存在於 pg_clog/* 中,包含著所有交易的提交狀態,所以檔案系統層級的備份只適用於整個 Cluster,若只備份某些特定檔案將導致資料不完整。

詳細說明可以參考
http://twpug.net/docs/postgresql-doc-8.0-zh_TW/backup-file.html