
후에
$ 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 테이블에 한 번에 한 행씩 액세스하여 어떤 행이 손상되었는지 확인한 다음 행을 삭제하는 것입니다. 아마도 가장 쉬운 방법은 SELECT * FROM page_parts LIMIT 를 수행하고 테이블의 행에 대해 이진 검색을 수행하는 것입니다(가운데에서 시작하여 각 부분을 반으로 자르는 등). 행을 식별한 후 삭제하면 나머지 데이터베이스를 덤프할 수 있습니다. 행이 있으면 데이터의 가치가 높은 경우 해당 행이 어떤 개별 열인지 식별할 수도 있습니다.
답변2
감사합니다. 간단한 스크립트를 만듭니다.
514 -- page_parts에서 개수(*) 선택
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