pg_dump 및 ERROR : 토스트 값에 청크 번호 0이 없습니다.


10

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 ...)

이 오류 메시지를 검색 할 때 테이블을 다시 색인화하도록 제안한 몇 가지 참조 ( herehere )를 발견했습니다 . (이 토론에서는 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에만 사용되며 업데이트는 없음).


아이디어를 찾았습니다 . 사건이 같은지 확인할 수 있습니까?
dezso

답변:


6

재 인덱싱을 수행 한 경우 인덱스 스캔을 사용하여 테이블에서 구운 값을 찾아서 찾을 수 없었습니다. 인덱스가 손상된 것 같습니다. 진공 분석은 테이블을 변경하지만 재 색인은 변경하지 않으며 변경 사항은 매우 적습니다.

이것을 생각하는 방법은 TOASTed 속성이 실제로 약 4k 크기의 덩어리로 나뉘어 행에 저장된다는 것입니다. 쿼리시 기본 행과 함께 조회 및 정렬 / 다시 연결됩니다. 여기에 사용 된 색인이 손상되어 재 색인으로 문제가 해결 된 것 같습니다.

손상된 인덱스는 일반적으로 서버에 문제가 있다는 신호입니다. 메모리, CPU 및 하드 드라이브가 모두 만족스럽고 문제를보고하지 않는지 확인하고 확인하는 것이 좋습니다. 과열 된 서버는 특히 인덱스 손상이 발생하기 쉬우 며 인덱스가 손상 될 수있는 경우 데이터가 손상되는 것에 대해 걱정해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.