PostgreSQLのREINDEXがまたまた死ねる

PostgreSQLのお話。


数日前から億レコード越えのテーブルに対して、
数千万件削除→VACUUM FULLを行った。


HDDの容量が圧迫されている対応であるが、
VACUUM FULLしても、容量が1ByteもOSの返却されない。


およよと、Google先生に相談してみると、
REINDEXをせよ!
とのお告げが。
ならばと、実行したのが運の尽き。
残りわずかなHDDを、pgsql_tmpと新規生成されたINDEXが強烈な勢いで食っていく。
あっつーまに、HDD100%達成。
PostgreSQL死亡。


しょうがないので、NAS上の空き領域に/db/data/base以下を全部コピーして、マウント。
/db/data/baseをバックアップとして、/db/data/base2に変更して、
/db/data/baseというシンボリックリンクを作成する。


これで、PostgreSQL起動したら、問題なくSELECT文発行できた。
REINDEXしたら、エラーなく開始。


なんとか一命を取り留めたかな。


REINDEX実行後、シンボリックリンクを削除して、
/db/data/baseをコピーしてやれば、復旧するはず。


今日得た教訓は、
「HDD容量ぎりぎりの状態ではREINDEXは命取り」
ということでした。


なんとも、苦しめてくれるテーブルである。。。