私はTRUNCATE
d _files
と呼ばれる巨大な(〜120Gb)テーブルを持っています:
TRUNCATE files;
VACUUM FULL files;
テーブルサイズは0ですが、ディスク領域は解放されませんでした。失われたディスク領域を取り戻す方法はありますか?
PDATE:ディスクスペースは約12時間後に解放されましたが、何もしませんでした。 Ubuntu 8.04サーバーを使用しています。
ソース内のコメント によると、truncate
は新しい空のストレージファイルを作成し、コミット時に古いストレージファイルを削除します。 (ドキュメントによると、「ストレージファイル」はOSに関する限り単なるファイルですが、用語を誤解している可能性があります。)
リレーション用の新しい空のストレージファイルを作成し、それをrelfilenode値として割り当てます。古いストレージファイルは、コミット時に削除される予定です。
ファイルを削除しているように見えるので、基盤となるオペレーティングシステムがその領域をすぐに解放しない場合があることは想像できます。たとえば、Windowsでは、ストレージファイルがごみ箱に入れられる場合があると思います。しかし、私の場合、PostgreSQL 9でテーブルを切り捨てると、Windowsですぐに空き容量が増えます。
切り捨てもWALログに記録されます。どれほどの効果があるのかわかりません。