Postgresql

PostgreSQL:TRUNCATE 後未釋放磁碟空間

  • June 27, 2011

我有TRUNCATE一個巨大的(~120Gb)表,名為files

TRUNCATE files;
VACUUM FULL files;

表大小為 0,但沒有釋放磁碟空間。任何想法如何回收我失去的磁碟空間?

更新: 磁碟空間在大約 12 小時後被釋放,我沒有採取任何行動。我使用 Ubuntu 8.04 伺服器。

根據原始碼中的註釋truncate創建一個新的空儲存文件,並在送出時刪除舊儲存文件。(文件建議“儲存文件”就作業系統而言只是一個文件,但我可能誤解了術語。)

為關係創建一個新的空儲存文件,並將其分配為 relfilenode 值。舊的儲存文件計劃在送出時刪除。

由於它似乎正在刪除一個文件,我可以想像在某些情況下底層作業系統可能不會立即釋放該空間。例如,我想在某些情況下,儲存文件可能最終會出現在 Windows 下的資源回收筒中。但就我而言,在 PostgreSQL 9.something 下截斷表會立即增加 Windows 下的可用空間。

截斷也記錄在 WAL 日誌中。我不知道這可能會產生多大的影響。

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