pg_dump: 서버의 오류 메시지: ERROR: pg_toast_16418의 토스트 값 43712886에 대한 청크 번호 0이 누락되었습니다.

pg_dump: 서버의 오류 메시지: ERROR: pg_toast_16418의 토스트 값 43712886에 대한 청크 번호 0이 누락되었습니다.

후에

$ 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

관련 정보