Postgresql

Postgres:回收空間

  • October 9, 2019

我有一個 150GB 磁碟空間的伺服器。今天我上傳了一個 30GB 的數據集。由於網際網路當機,我取消了導入,然後注意到數據庫中缺少 29GB 的空間(這意味著 CSV 已上傳,但在我中斷操作時並未刪除)。再次上傳數據時,它又壞了,我又損失了大約 25GB。現在沒有足夠的可用空間來上傳數據。

它託管在 AWS RDS、Postgres 10.6 上。

有沒有辦法解決這個問題?我讀過關於VACUUM. 但這會刪除記錄嗎?我現在託管約 70GB 的數據,不想失去任何記錄。解決這個問題的最佳方法是什麼?

PostgreSQL 將死數據留在表中;空間可以重複使用,但文件不會縮小(顯著)。

回收空間的官方方法是VACUUM (FULL),但這會重寫整個表,在此期間將無法進行任何訪問。有一些擴展被呼叫pg_squeezepg_repack它們在“幕後”做同樣的事情,減少干擾。

所有這些方法的共同點是它們需要足夠的可用空間來創建表的副本,因此您可能無論如何都無法繞過增加儲存空間。

現在是個好消息:

如果你VACUUM在桌子上執行一個平原,這不會造成破壞,浪費的空間可以重複使用。因此,您下次嘗試載入數據不會增加表的大小。

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