PostgreSQL 8.4.15を使用しています。pg_dump
データベースのバックアップを実行しているときに、次のエラーが発生しました。
pg_dump: SQL command failed
pg_dump: Error message from server: ERROR: missing chunk number 0 for toast value 123456789 in pg_toast_987654321
pg_dump: The command was: COPY public.my_table (id, .... all the columns ...)
このエラーメッセージを検索したところ、テーブルのインデックスを再作成することを提案する参照(hereおよびhere)がいくつか見つかりました。(これらの議論ではpg_class
、正しいpg_toast_XXXXXX
値を見つけるためにテーブルをクエリすることへの言及がありましたが、それはエラーメッセージに表示されなかったためであると思われました。エラーメッセージに値が表示されたため、この部分をスキップしました。それ以降のバージョンのPostgreSQLが原因で便利になると思います。)
私は以下を実行しました:
REINDEX table pg_toast.pg_toast_987654321;
VACUUM ANALYZE my_table;
pg_dump
エラーなしで使用できるようになりました。
pg_toast
これらのコマンドは実際に何をして何をしたのですか?これらは単に単純なクリーンアップに関するものですか、それともそのテーブルの一部の行を削除できたのでしょうか?そもそも何が問題の原因でしたか?
このテーブルには約300000行ありますが、前回の正常なバックアップ以降、約250行しかないと予想されます(このテーブルはINSERT / SELECTにのみ使用され、UPDATEには使用されません)。