이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.현재버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

62.4. 윈 토토

이 섹션에서는 구현자에게 유용한 구현 세부 정보 및 기타 트릭을 다룹니다.SP-GiST알아두어야 할 연산자 클래스.

62.4.1. SP-GiST 제한

개별 리프 튜플과 내부 튜플은 단일 색인 페이지에 맞아야 합니다(기본적으로 8kB). 따라서 가변 길이 데이터 형식의 값을 인덱싱할 때 긴 값은 트리의 각 수준에 페이지에 맞을 만큼 짧은 접두사가 포함되고 마지막 리프 수준에도 페이지에 들어갈 만큼 짧은 접미사가 포함되는 기수 트리와 같은 방법을 통해서만 지원될 수 있습니다. 연산자 클래스는 설정해야 합니다.longValuesOK이런 일이 발생하도록 준비한 경우에만 TRUE로 설정됩니다. 그렇지 않으면,SP-GiST코어는 너무 커서 색인 페이지에 맞지 않는 값을 색인화하라는 요청을 거부합니다.

마찬가지로, 내부 튜플이 색인 페이지에 맞을 정도로 너무 커지지 않도록 하는 것은 연산자 클래스의 책임입니다. 이는 하나의 내부 튜플에서 사용할 수 있는 하위 윈 토토의 수와 접두사 값의 최대 크기를 제한합니다.

또 다른 제한은 내부 튜플의 윈 토토가 리프 튜플 세트를 가리킬 때 해당 튜플이 모두 동일한 인덱스 페이지에 있어야 한다는 것입니다. (이는 검색을 줄이고 이러한 튜플을 함께 연결하는 링크의 공간을 절약하기 위한 디자인 결정입니다.) 리프 튜플 세트가 페이지에 비해 너무 커지면 분할이 수행되고 중간 내부 튜플이 삽입됩니다. 문제를 해결하기 위해 새로운 내부 튜플반드시리프 값 세트를 둘 이상의 윈 토토 그룹으로 나눕니다. 연산자 클래스의 경우picksplit함수가 이를 수행하지 못했습니다.SP-GiST핵심은 다음에 설명된 특별한 조치를 취함섹션 62.4.3.

언제longValuesOK맞습니다. 연속적인 수준의SP-GiST트리는 내부 튜플의 접두어와 노드 레이블에 점점 더 많은 정보를 흡수하여 필요한 리프 데이터를 점점 더 작게 만들어 결국 페이지에 맞도록 만듭니다. 연산자 클래스의 버그로 인해 무한 삽입 루프가 발생하는 것을 방지하려면SP-GiST리프 데이텀이 10주기 이내에 더 작아지지 않으면 코어는 오류를 발생시킵니다.선택메소드 호출.

62.4.2. 노드 레이블이 없는 SP-GiST

일부 트리 알고리즘은 각 내부 튜플에 대해 고정된 윈 토토 집합을 사용합니다. 예를 들어, 쿼드 트리에는 항상 내부 튜플의 중심점 주위의 4개 사분면에 해당하는 정확히 4개의 윈 토토가 있습니다. 이러한 경우 코드는 일반적으로 번호별로 윈 토토와 함께 작동하며 명시적인 윈 토토 레이블이 필요하지 않습니다. 윈 토토 레이블을 억제하여 공간을 절약하려면,picksplit함수는 다음에 대해 NULL을 반환할 수 있습니다.윈 토토 라벨배열. 결과적으로 다음과 같은 결과가 발생합니다.윈 토토 라벨다음 호출 중에 NULL임선택그리고내부_일관성. 원칙적으로 윈 토토 레이블은 일부 내부 튜플에 사용되고 동일한 인덱스의 다른 튜플에는 생략될 수 있습니다.

레이블이 지정되지 않은 윈 토토가 있는 내부 튜플로 작업할 때 오류가 발생합니다.선택돌아오다spgAddNode, 이러한 경우 윈 토토 집합이 고정되어야 하기 때문입니다. 또한 레이블이 지정되지 않은 윈 토토를 생성하기 위한 규정이 없습니다.spgSplitTuple작업, 다음이 예상되므로spgAddNode조치도 필요할 것입니다.

62.4.3. "모두 똑같습니다"내부 튜플

SP-GiST코어는 연산자 클래스의 결과를 재정의할 수 있습니다.picksplit언제 함수picksplit제공된 리프 값을 최소한 두 개의 노드 범주로 나누는 데 실패했습니다. 이런 일이 발생하면 각각 동일한 레이블(있는 경우)을 갖는 여러 노드로 새로운 내부 튜플이 생성됩니다.picksplit사용한 노드 하나에 부여되었으며 리프 값은 이러한 등가 노드 간에 무작위로 나뉩니다.allTheSame플래그는 내부 튜플에 설정되어 경고합니다.선택그리고내부_일관성튜플에 예상할 수 있는 윈 토토 세트가 없는 함수입니다.

다음을 처리할 때allTheSame튜플, a선택결과spgMatchNode은 새 값이 동등한 윈 토토에 할당될 수 있음을 의미하는 것으로 해석됩니다. 핵심 코드는 제공된 코드를 무시합니다윈 토토N값을 계산하고 무작위로 노드 중 하나로 내려갑니다(트리의 균형을 유지하기 위해). 오류입니다.선택돌아오다spgAddNode, 그렇게 하면 윈 토토가 모두 동일하지 않게 되기 때문입니다.spgSplitTuple삽입할 값이 기존 윈 토토와 일치하지 않는 경우 조치를 사용해야 합니다.

다음을 처리할 때allTheSame튜플, 그내부_일관성함수는 인덱스 검색을 계속하기 위한 대상으로 윈 토토 전체를 반환하거나 전혀 반환하지 않아야 합니다. 왜냐하면 윈 토토는 모두 동일하기 때문입니다. 여기에는 특수 사례 코드가 필요할 수도 있고 필요하지 않을 수도 있습니다.내부_일관성함수는 일반적으로 윈 토토의 의미를 가정합니다.