Postgresql
是否可以通過 Postgres WAL 歸檔來防止數據失去?
正如我從文件中了解到的那樣,當段文件達到一定大小或由於
archive_timeout
.因此,如果數據庫崩潰,來自不完整的、目前活動的 WAL 段的所有數據都將失去(假設我們無權訪問 Postgres 目錄中的那個不完整的段)。
我做對了嗎?如果是這樣,有沒有辦法避免這種數據失去?
你是對的。
避免這種情況的方法是使用
pg_receivewal
,它從數據庫伺服器流式傳輸 WAL 資訊並立即將其保存在 WAL 段副本中。預設情況下,這是非同步的,因此在發生崩潰時您可能會失去一些分秒。您需要避免這種情況,您必須使用同步複製
pg_receivewal
,但請注意
- 這會使 DML 語句變慢,因為
COMMIT
在收到pg_receivewal
.- 你不應該設置
synchronous_commit = remote_apply
,因為pg_receivewal
從不應用更改,它只是將它們保存到 WAL 文件中。