Postgresql

如果 PostgreSQL DB 或伺服器異常關閉,臟數據會發生什麼?

  • July 8, 2022

假設我的 PostgreSQL 實例突然異常停止並且數據是臟的並且沒有保存在 RAM 或 WAL 中。在那種情況下會發生什麼?

我可以從哪裡恢復這些數據?如果伺服器也在這種情況下關閉,臟數據會發生什麼?

是否有任何單獨的文件儲存這些臟數據以進行恢復?

數據是臟的,沒有保存在 RAM 或 WAL 中。

如果不在這些位置,這些數據會在哪裡?

在 Postgres 執行檔中,記憶體、WAL 和磁碟文件中的數據寫入時間有一個嚴格定義的順序。這確保了系統崩潰後的一致恢復。已送出的事務在恢復後仍會顯示在數據中。進行了更改但未送出的事務將被回滾。無論他們可能造成什麼“骯髒”,都會被抹去。

您無需手動執行任何操作即可實現此目的。它內置在執行檔中。

交易中的髒數據“保存”在 RAM 中(但不會在關機後繼續存在),它們也可能保存在 WAL 中。它們甚至可以寫入數據文件並持久化到磁碟。

然而,這一切都無所謂。只要事務沒有送出,事務在送出日誌中就不會被標記為已送出,所有數據都是不可見的。如果中止事務中的任何數據在關閉之前進入數據文件,autovacuum 將在稍後刪除它們。

引用自:https://dba.stackexchange.com/questions/314148