REINDEX다음을 사용하여 색인을 다시 작성합니다. 인덱스 테이블에 저장된 데이터로 이전 복사본을 대체합니다. 색인. 사용할 수 있는 몇 가지 시나리오가 있습니다.REINDEX:
색인이 손상되어 더 이상 포함되지 않습니다. 유효한 데이터. 이론적으로는 절대 이런 일이 일어나서는 안 되지만, 소프트웨어 버그로 인해 연습 색인이 손상될 수 있습니다. 하드웨어 오류.REINDEX제공 복구 방법입니다.
색인이 되었습니다"부풀어오르다", 즉, 비어 있거나 거의 비어 있는 페이지가 많이 포함되어 있습니다. 이 B-트리 토토에서 발생할 수 있습니다.포스트그레SQL특정 비일반적인 액세스 아래 패턴.REINDEX방법을 제공합니다 새로운 토토를 작성하여 토토의 공간 소비를 줄입니다. 데드 페이지가 없는 토토 버전입니다. 참조섹션 23.2더 보기 정보.
저장 매개변수(예: 채우기 요소)를 변경했습니다. 토토에 대해 변경 사항이 적용되었는지 확인하고 싶습니다. 완전한 효과를 발휘합니다.
다음을 사용한 색인 빌드동시옵션이 실패하여 다음을 남깁니다."잘못됨"색인. 그러한 토토는 쓸모는 없지만 사용하기 편리할 수 있습니다REINDEX재구축합니다. 참고하세요REINDEX동시 빌드를 수행하지 않습니다. 생산을 방해하지 않고 인덱스를 구축하려면 인덱스를 삭제하고 다시 발행해야 합니다.동시에 인덱스 생성명령.
지정된 색인을 다시 생성하십시오.
지정된 테이블의 모든 토토를 다시 생성합니다. 만약 테이블에 보조 테이블이 있습니다."토스트"테이블도 다시 색인화되었습니다.
현재 데이터베이스 내의 모든 색인을 다시 생성하십시오. 공유 시스템 카탈로그의 인덱스도 처리됩니다. 이 의 형태REINDEX실행할 수 없습니다 거래 블록 내부.
시스템 카탈로그의 모든 색인을 다시 생성합니다. 현재 데이터베이스. 공유 시스템 카탈로그의 인덱스는 다음과 같습니다. 포함됩니다. 사용자 테이블의 인덱스는 처리되지 않습니다. 이 의 형태REINDEX실행할 수 없습니다 거래 블록 내부.
특정 인덱스, 테이블 또는 데이터베이스의 이름 다시 색인화되었습니다. 인덱스 및 테이블 이름은 스키마로 한정될 수 있습니다. 현재,REINDEX 데이터베이스그리고REINDEX 시스템재색인만 가능 현재 데이터베이스이므로 해당 매개변수는 현재 데이터베이스의 이름입니다.
이것은 더 이상 사용되지 않는 옵션입니다. 다음과 같은 경우에는 무시됩니다. 지정되었습니다.
사용자 테이블의 색인 손상이 의심되는 경우 다음을 수행할 수 있습니다. 간단히 다음을 사용하여 해당 인덱스 또는 테이블의 모든 토토를 다시 작성하십시오.REINDEX 인덱스또는REINDEX 테이블.
회복해야 한다면 상황은 더욱 어려워집니다 시스템 테이블의 인덱스가 손상되었습니다. 이 경우에는 시스템이 용의자를 사용하지 않은 것이 중요합니다. 자체적으로 인덱스를 생성합니다. (실제로 이런 종류의 시나리오에서는 서버 프로세스가 시작 시 즉시 충돌하는 것으로 나타났습니다. 손상된 인덱스에 의존합니다.) 안전하게 복구하려면 서버는 다음으로 시작되어야 합니다.-P옵션, 시스템 카탈로그에 대한 색인 사용을 방지함 조회.
이를 수행하는 한 가지 방법은 서버를 종료하고 단일 사용자PostgreSQL서버 와 함께-P옵션이 포함되어 있습니다. 명령줄. 그럼,REINDEX 데이터베이스, REINDEX 시스템, REINDEX 테이블또는REINDEX 인덱스원하는 금액에 따라 발행 가능 재구성하다. 의심스러운 경우 다음을 사용하세요.REINDEX 시스템모든 시스템 색인의 재구성을 선택하려면 데이터베이스. 그런 다음 단일 사용자 서버 세션을 종료하고 다시 시작하십시오. 일반 서버. 참조포스트그레스상호작용 방법에 대한 자세한 내용은 참조 페이지 단일 사용자 서버 인터페이스.
또는 다음을 사용하여 일반 서버 세션을 시작할 수 있습니다.-P명령줄 옵션에 포함되어 있습니다. 이를 수행하는 방법은 클라이언트마다 다르지만 모두libpq기반 클라이언트입니다. 설정 가능PGOPTIONS환경 변수를-P시작하기 전에 클라이언트. 이 방법에는 잠금이 필요하지 않지만 다른 클라이언트가 있는 경우 다른 사용자가 복구가 완료될 때까지 손상된 데이터베이스에 연결 완료되었습니다.
REINDEX드롭과 유사하며 토토 내용이 다시 작성된다는 점에서 토토를 다시 만듭니다. 스크래치. 그러나 잠금 고려사항은 오히려 다르다.REINDEX쓰기를 차단하지만 토토의 상위 테이블을 읽지 않습니다. 독점도 걸립니다 처리 중인 특정 토토를 잠그면 차단됩니다. 해당 토토를 사용하려고 시도하는 읽기입니다. 대조적으로,토토 삭제일시적으로 배타적 잠금을 수행합니다. 쓰기와 읽기를 모두 차단하는 상위 테이블입니다. 후속색인 생성쓰기를 잠그지만 잠그지는 않습니다. 읽다; 토토가 없기 때문에 읽기를 사용하려고 시도하지 않습니다. 이는 차단은 없지만 읽기는 불가능할 수 있음을 의미합니다. 비용이 많이 드는 순차 스캔을 수행해야 합니다.
단일 색인 또는 테이블을 다시 색인화하려면 다음의 소유자여야 합니다. 해당 인덱스나 테이블. 데이터베이스를 다시 색인화하려면 데이터베이스 소유자(따라서 소유자는 재구축할 수 있습니다. 다른 사용자가 소유한 테이블의 인덱스). 물론, 슈퍼유저 언제든지 무엇이든 다시 색인화할 수 있습니다.
이전PostgreSQL 8.1, REINDEX 데이터베이스처리된 시스템만 이름에서 예상할 수 있듯이 모든 인덱스가 아닌 인덱스입니다. 이 놀라움 요인을 줄이기 위해 변경되었습니다. 오래된 행동 다음과 같이 사용할 수 있습니다.REINDEX 시스템.
이전PostgreSQL 7.4, REINDEX 테이블자동으로 수행되지 않음 TOAST 테이블을 처리하므로 해당 테이블은 다음에 의해 다시 인덱싱되어야 했습니다. 별도의 명령. 이는 여전히 가능하지만 중복됩니다.