archive_mode (enum)
當啟用archive_mode時,可以通過設置archive_command命令將完成的 WAL段發送到歸檔存儲。 除了off,要禁用兩種模式on和 always。在正常操作過程中,兩種模式沒有區別,但是 當設置為always時,歸檔恢復或者待機模式中激活WAL歸檔。 在always模式中, 從歸檔中恢復所有文件或者再次歸檔使用流復制傳輸的文件。archive_mode和archive_command 是獨立的變量,這樣可以在不影響歸檔模式的前提下修改 archive_command。這個參數只能在服務器啟動時設置。 當wal_level被設置為minimal時, archive_mode不能被啟用。
archive_command (string)
本地shell 命令被執行來歸檔一個完成的 WAL 文件段。字符串中的任何%p被替換成要被歸檔的文件的路徑名, 而%f只被文件名替換(路徑名是相對于服務器的工作目錄, 即集簇的數據目錄)。如果要在命令里嵌入一個真正的%字符,可以使用%%。有一點很重要,該命令只在成功時返回一個零作為退出狀態。這個參數只能在postgresql.conf文件中或在服務器命令行上設置。除非服務器啟動時啟用了archive_mode,否則它會被忽略。如果archive_mode被啟用時,archive_command是一個空字符串(默認),WAL 歸檔會被臨時禁用,但服務器仍會繼續累計 WAL 段文件,期待著一個命令被提供。將archive_command設置為一個只返回真但不做任何事的命令(例如/bin/true或 Windows 上的REM)實際上會禁用歸檔,也會打破歸檔恢復所需的 WAL 文件鏈,因此只有在極少數情況下才能用。
archive_timeout (integer)
archive_command僅在已完成的 WAL 段上調用。因此,如果你的服務器只產生很少的 WAL 流量(或產生流量的周期很長),那么在事務完成和它被安全地記錄到歸檔存儲之間將有一個很長的延遲。為了限制未歸檔數據存在的時間,你可以設置archive_timeout來強制服務器來周期性地切換到一個新的 WAL 段文件。當這個參數被設置為大于零時,只要從上次段文件切換后過了參數所設置的那么多秒并且已經有過任何數據庫活動,包括一個單一檢查點(如果沒有數據庫活動則跳過檢查點),服務器將切換到一個新的段文件。注意,由于強制切換而提早關閉的被歸檔文件仍然與完整的歸檔文件長度相同。因此,使用非常短的archive_timeout是不明智的 — 它將占用巨大的歸檔存儲。一分鐘左右的archive_timeout設置通常比較合理。如果你希望數據能被更快地從主服務器上復制下來,你應該考慮使用流復制而不是歸檔。這個參數只能在postgresql.conf文件中或在服務器命令行上設置。