Postgresql

PostgreSQL 沒有釋放空間“UPDATE set column = null”,vacuum 也沒有用

  • May 3, 2022

我有一個巨大的表,我無法刪除行,只能更新儲存大量 base64 數據的列,我應該將其更新為 null 以嘗試釋放空間。

所以我編寫了一個腳本,它能夠在 base64 中設置所有圖像,期望在 Vacuum 之後釋放空間!

圖像設置為 null,執行真空,但表仍然具有完全相同的大小,我很確定必須立即釋放空間,所以我做錯了什麼?

真空完全能夠從我更新為空的巨大 varchar 數據中釋放空間嗎?(因為如果我要這樣做,我需要鎖定桌子,我需要確定)

轉儲大小減少了 10 倍,因此我預計數據庫大小會有類似的行為。

簡短的回答 - 是的。

更新行時,您會為表中保存的每一行創建一個新版本

  • Vacuum不會刪除這些行版本。

確實使這些“死”行佔用的空間可供重用,但這並不會減少整體大小。

  • Vacuum Full 完全移除死行。

這就是將空間釋放回作業系統的原因。

是的; 發生這種情況時,表將被鎖定。

請參閱PostgreSQL Wiki頁面上的“Vacuum Full”。

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