
後
$ pg_dumpall -U postgres -f /tmp/pgall.sql
次のように表示されます。
pg_dump: SQL command failed
pg_dump: Error message from server: ERROR: missing chunk number 0 for toast value 43712886 in pg_toast_16418
pg_dump: The command was: COPY public.page_parts (id, name, filter_id, content, page_id) TO stdout;
pg_dumpall: pg_dump failed on database "radiant", exiting
以前のバックアップがありません。どうすれば修正できますか?
前もって感謝します。
答え1
これは、何らかの理由でデータベースが基本的に破損していることを意味します。
必要なのは、テーブル page_parts に少しずつ (一度に 1 行ずつ) アクセスして、どの行が破損しているかを判断し、その行を削除することです。これを行う最も簡単な方法は、 SELECT * FROM page_parts LIMIT を実行し、テーブル内の行に対してバイナリ検索を実行することです (中央から開始し、各部分を半分に分割するなど)。行を特定したら、それを削除すれば、データベースの残りの部分をダンプできるはずです。行を取得したら、もちろん、データの価値が高い場合は、個々の列を特定することもできます。
答え2
ありがとう。簡単なスクリプトを作成してください。
514 -- page_parts から count(*) を選択
for ((i=0; i<514; i++ )); do psql -U postgres radiant -c "SELECT * FROM page_parts LIMIT 1 offset $i" >/dev/null || echo $i; done
ERROR: missing chunk number 0 for toast value 43712886 in pg_toast_16418
433