ErogameScapeは毎日1回pg_dumpでバックアップを取得しています。
※差分バックアップを使わなくていい程度のデータ量なのです…

バックアップを使うのは致命的な障害が発生した場合と、誤ってデータを削除した場合の2通りあるのですが、先日、後者の事例が発生して10日前のバックアップを用いてpg_restoreしました。

すると以下のメッセージが出て、いくつかのテーブルの復旧に失敗しました。

pg_restore: [(db)] TOC1779; 1259 104147143 SEQUENCE mod_musicitemlist_id_seq ap2
pg_restore: [(db)] could not execute query: ERROR:  could not read block 4 in file "global/12791": read only 0 of 8192 bytes
   : CREATE SEQUENCE mod_musicitemlist_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;

pg_restore: [(db)] TOC1780; 1259 104147145 TABLE mod_musiclist ap2
pg_restore: [(db)] could not execute query: ERROR:  could not read block 7 in file "global/12791": read only 0 of 8192 bytes
   : CREATE TABLE mod_musiclist (
    id integer NOT NULL,
    music integer NOT NULL,
    name text NOT NULL,
    furigana text ...

pg_restore: [(db)] TOC1781; 1259 104147155 SEQUENCE mod_musiclist_id_seq ap2
pg_restore: [(db)] could not execute query: ERROR:  could not read block 8 in file "global/12791": read only 0 of 8192 bytes
   : CREATE SEQUENCE mod_musiclist_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;

おそらくメッセージのとおりでglobal/12791が壊れているのだと思います。
どのように復旧すればいいか分かりませんでした。

とりあえず現在の現用のデータベースは生きているので、pg_dumpallでデータベースを書き出して、読み込んでみたら問題なく完了しました。
そこで最新のpg_dumpの出力をpg_restoreしてみたところ、やはり問題なく完了しました。

推測になりますが、実際のglobal/12791は壊れていないので、pg_dumpしたときに読み取りに失敗していたのかな…と思います。
マニュアルに「pg_dumpの実行中は、標準エラーに出力される警告(特に後述の制限に関する警告)が出力されていないか確認してください。 」と書いてあるのですがlogを取得してないので、logを取得してちゃんと見ないとダメだな…と思いました。