web-dev-qa-db-ja.com

PostgreSQL:TRUNCATE後にディスク領域が解放されない

私はTRUNCATEd _filesと呼ばれる巨大な(〜120Gb)テーブルを持っています:

TRUNCATE files;
VACUUM FULL files;

テーブルサイズは0ですが、ディスク領域は解放されませんでした。失われたディスク領域を取り戻す方法はありますか?

PDATE:ディスクスペースは約12時間後に解放されましたが、何もしませんでした。 Ubuntu 8.04サーバーを使用しています。

12
Adam Matan

ソース内のコメント によると、truncateは新しい空のストレージファイルを作成し、コミット時に古いストレージファイルを削除します。 (ドキュメントによると、「ストレージファイル」はOSに関する限り単なるファイルですが、用語を誤解している可能性があります。)

リレーション用の新しい空のストレージファイルを作成し、それをrelfilenode値として割り当てます。古いストレージファイルは、コミット時に削除される予定です。

ファイルを削除しているように見えるので、基盤となるオペレーティングシステムがその領域をすぐに解放しない場合があることは想像できます。たとえば、Windowsでは、ストレージファイルがごみ箱に入れられる場合があると思います。しかし、私の場合、PostgreSQL 9でテーブルを切り捨てると、Windowsですぐに空き容量が増えます。

切り捨てもWALログに記録されます。どれほどの効果があるのか​​わかりません。