はじめに
PostgresSQLにおいてテーブルの行や列を削除した時、VACUUMが実行されるまでテーブルから物理的には削除されない。
不要領域を回収するVACUUMは、PostgresSQLが自動的に実行してくれる。
しかし、まれに特定のテーブルだけ実行されないことがあり、
実行計画において削除したはずの列を参照してしまい、SQLの実行が成功しない場合がある。
この場合、手動でVACUUMを実行し、統計情報を再計算する。
SQLの実行手順
統計情報テーブルのカラム「last_vacuum」「last_analyze」を確認する。ここに直近にVACUUMした日付が入る
select * from pg_stat_all_tables where relname = 'テーブル名をここに記入';
不要領域を回収し統計情報を再計算する。トランザクション(begin,commit)は不要
VACUUM ANALYZE テーブル名をここに記入;
カラム「last_vacuum」「last_analyze」の日付をを確認して更新されていることを確認する
select * from pg_stat_all_tables where relname = 'テーブル名をここに記入';
参考