Postgresql
Postgres:回收空間
我有一個 150GB 磁碟空間的伺服器。今天我上傳了一個 30GB 的數據集。由於網際網路當機,我取消了導入,然後注意到數據庫中缺少 29GB 的空間(這意味著 CSV 已上傳,但在我中斷操作時並未刪除)。再次上傳數據時,它又壞了,我又損失了大約 25GB。現在沒有足夠的可用空間來上傳數據。
它託管在 AWS RDS、Postgres 10.6 上。
有沒有辦法解決這個問題?我讀過關於
VACUUM
. 但這會刪除記錄嗎?我現在託管約 70GB 的數據,不想失去任何記錄。解決這個問題的最佳方法是什麼?
PostgreSQL 將死數據留在表中;空間可以重複使用,但文件不會縮小(顯著)。
回收空間的官方方法是
VACUUM (FULL)
,但這會重寫整個表,在此期間將無法進行任何訪問。有一些擴展被呼叫pg_squeeze
,pg_repack
它們在“幕後”做同樣的事情,減少干擾。所有這些方法的共同點是它們需要足夠的可用空間來創建表的副本,因此您可能無論如何都無法繞過增加儲存空間。
現在是個好消息:
如果你
VACUUM
在桌子上執行一個平原,這不會造成破壞,浪費的空間可以重複使用。因此,您下次嘗試載入數據不會增加表的大小。