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

56.2. 확장성

SP-GiST인터페이스 제공 높은 수준의 추상화로 인해 액세스 방법이 필요함 개발자는 주어진 데이터 유형에 특정한 메소드만 구현합니다.SP-GiST핵심이 책임을 집니다. 효율적인 디스크 매핑과 트리 구조 검색을 위해 그것 동시성 및 로깅 고려 사항도 처리합니다.

an의 리프 사설 토토SP-GiST트리에는 색인화된 열과 동일한 데이터 유형의 값이 포함되어 있습니다. 루트 수준의 리프 튜플에는 항상 원본이 포함됩니다. 인덱스된 데이터 값이지만 더 낮은 수준의 리프 튜플에는 다음이 포함될 수 있습니다. 접미사와 같은 압축된 표현만 가능합니다. 그런 경우에는 연산자 클래스 지원 함수는 재구성할 수 있어야 합니다. 내부에서 축적된 정보를 이용하여 원래의 값을 리프 수준에 도달하기 위해 전달되는 튜플입니다.

내부 사설 토토은 분기점이므로 더 복잡합니다. 검색 트리에서 각 내부 사설 토토에는 하나 이상의 집합이 포함됩니다.노드8821_9038라벨그것이 설명되어 있습니다; 예를 들어, 기수에서 트리 노드 레이블은 문자열의 다음 문자일 수 있습니다. 가치. 선택적으로 내부 튜플은 다음을 가질 수 있습니다.접두사모든 구성원을 설명하는 값입니다. 에서 기수 트리는 표현된 트리의 공통 접두사가 될 수 있습니다. 문자열. 접두사 값은 실제로 접두사일 필요는 없지만 연산자 클래스에 필요한 모든 데이터가 될 수 있습니다. 예를 들어, 쿼드 트리(quad-tree)는 4개의 사분면이 있는 중심점을 저장할 수 있습니다. 에 대하여 측정됩니다. 쿼드 트리 내부 튜플은 다음과 같습니다. 또한 이 주위의 사분면에 해당하는 4개의 노드를 포함합니다. 중심점.

일부 트리 알고리즘에는 다음의 수준(또는 깊이)에 대한 지식이 필요합니다. 현재 튜플이므로SP-GiST코어는 다음에 대한 가능성을 제공합니다. 하강하는 동안 레벨 계산을 관리하는 연산자 클래스 나무. 점진적인 재구성도 지원됩니다. 필요할 때 표현된 값입니다.

참고:SP-GiST코어 코드는 null 항목을 처리합니다. 그래도SP-GiST색인은 null에 대한 항목을 다음 위치에 저장합니다. 색인이 생성된 열은 색인 연산자 클래스 코드에서 숨겨집니다. null 인덱스 항목이나 검색 조건은 전달되지 않습니다. 연산자 클래스 메소드. (가정됩니다.SP-GiST연산자는 엄격하므로 할 수 없습니다. Null 값은 성공합니다.) 따라서 Null 값은 논의되지 않습니다. 여기서 더 나아가세요.

색인 연산자 클래스에는 5개의 사용자 정의 메소드가 있습니다. 에 대한SP-GiST제공해야 합니다. 모두 5개는 2개를 받아들이는 관례를 따릅니다.내부인수 중 첫 번째는 다음에 대한 포인터입니다. 지원 방법에 대한 입력 값을 포함하는 C 구조체 두 번째 인수는 출력 값이 있는 C 구조체에 대한 포인터입니다. 배치해야 합니다. 메소드 중 4개가 반환됩니다.무효, 모든 결과가 출력에 나타나기 때문입니다. 구조체; 하지만leaf_condependent추가로 a를 반환합니다.부울결과. 는 메서드는 입력 구조체의 어떤 필드도 수정해서는 안 됩니다. 전체적으로 경우 출력 구조체는 호출하기 전에 0으로 초기화됩니다. 사용자 정의 방법.

5개의 사용자 정의 방법은 다음과 같습니다:

구성

색인 구현에 대한 정적 정보를 반환합니다. 접두사 및 노드 레이블 데이터의 데이터 유형 OID를 포함합니다. 유형.

SQL선언 함수는 다음과 같아야 합니다:

CREATE FUNCTION my_config(내부, 내부) 반환 무효 ...

첫 번째 인수는 a에 대한 포인터입니다.spgConfigIn다음에 대한 입력 데이터를 포함하는 C 구조체 기능. 두 번째 인수는 a에 대한 포인터입니다.spgConfigOutC 구조체, 함수는 다음과 같아야 합니다. 결과 데이터를 채워주세요.

typedef 구조체 spgConfigIn

    Oid attType;        /* 인덱싱할 데이터 유형 */
 spgConfigIn;

typedef 구조체 spgConfigOut

    Oid 접두사 유형;     /* 내부 튜플 접두사의 데이터 유형 */
    Oid labelType;      /* 내부 튜플 노드 레이블의 데이터 유형 */
    bool canReturnData;  /* Opclass는 원본 데이터를 재구성할 수 있습니다 */
    bool longValuesOK;   /* Opclass는 1 페이지보다 큰 값에 대처할 수 있습니다 */
 spgConfigOut;

attType다음을 위해 전달됩니다. 다형성 인덱스 연산자 클래스를 지원합니다. 보통의 경우 고정 데이터 유형 연산자 클래스는 항상 동일합니다. 값이므로 무시할 수 있습니다.

접두사를 사용하지 않는 연산자 클래스의 경우,접두사 유형다음으로 설정 가능VOIDOID. 마찬가지로, 그렇지 않은 연산자 클래스의 경우 노드 라벨을 사용하세요.라벨 유형설정 가능 에VOIDOID. canReturnData연산자가 다음과 같은 경우 true로 설정되어야 합니다. 클래스는 원래 제공된 인덱스를 재구성할 수 있습니다. 값.longValuesOK참으로 설정되어야 합니다 오직 다음 경우에만attType변수임 length 및 연산자 클래스는 긴 값을 분할할 수 있습니다. 반복되는 접미사 사용(참조섹션 56.3.1).

선택

내부에 새 값을 삽입하는 방법을 선택합니다. 튜플.

SQL선언 함수는 다음과 같아야 합니다:

함수 생성 my_choose(내부, 내부) 반환 무효 ...

첫 번째 인수는 a에 대한 포인터입니다.spgChooseIn다음에 대한 입력 데이터를 포함하는 C 구조체 기능. 두 번째 인수는 a에 대한 포인터입니다.spgChooseOut함수는 다음과 같은 C 구조체를 사용해야 합니다. 결과 데이터를 채워주세요.

typedef 구조체 spgChooseIn

    데이텀 데이텀;          /* 인덱싱할 원본 데이터 */
    데이텀 리프Datum;      /* 리프에 저장될 현재 데이터 */
    정수 수준;          /* 현재 레벨(0부터 계산) */

    /* 현재 내부 튜플의 데이터 */
    bool allTheSame;     /* 튜플은 모두 동일하게 표시됩니까? */
    bool hasPrefix;      /* 튜플에 접두사가 있나요? */
    데이텀 접두사Datum;    /* 그렇다면 접두사 값 */
    int nNodes;         /* 내부 튜플의 노드 수 */
    데이텀 *nodeLabels;     /* 노드 레이블 값(없으면 NULL) */
 spgChooseIn;

typedef 열거형 spgChooseResultType

    spgMatchNode = 1, /* 기존 노드로 내려갑니다 */
    spgAddNode, /* 내부 튜플에 노드 추가 */
    spgSplitTuple /* 내부 튜플 분할(접두사 변경) */
 spgChooseResultType;

typedef 구조체 spgChooseOut

    spgChooseResultType 결과 유형;     /* 액션 코드, 위 참조 */
    노동조합

        struct /* spgMatchNode에 대한 결과 */

            int nodeN;      /* 이 노드로 내려갑니다(인덱스 0부터) */
            int 레벨추가;   /* 이만큼 레벨을 증가시킵니다 */
            데이텀 레스트데이텀;  /* 새 잎 데이텀 */
         matchNode;
        struct /* spgAddNode에 대한 결과 */

            데이텀 nodeLabel;  /* 새 노드의 레이블 */
            int nodeN;      /* 삽입할 위치(인덱스는 0부터) */
         addNode;
        struct /* spgSplitTuple에 대한 결과 */

            /* 하나의 노드로 새로운 내부 튜플을 형성하는 정보 */
            bool prefixHasPrefix;    /* 튜플에는 접두사가 있어야 합니까? */
            데이텀 접두사PrefixDatum;  /* 그렇다면 그 값 */
            데이텀 nodeLabel;          /* 노드의 라벨 */

            /* 모든 이전 노드로 새로운 하위 수준 내부 튜플을 형성하기 위한 정보 */
            bool postfixHasPrefix;   /* 튜플에는 접두사가 있어야 합니까? */
            데이텀 postfixPrefixDatum; /* 그렇다면 그 값 */
         분할튜플;
               결과;
 spgChooseOut;

데이텀원래 데이텀은 색인에 삽입되었습니다.leafDatum처음에는와 동일합니다.데이텀, 그러나 더 낮은 수준에서는 변경될 수 있습니다. 만약 트리선택또는picksplit메소드로 변경됩니다. 삽입할 때 검색이 리프 페이지에 도달하면 현재 값은leafDatum새로 저장될 내용입니다. 리프 사설 토토을 생성했습니다.레벨이것은 현재 내부 튜플의 수준, 루트 수준의 경우 0부터 시작합니다.allTheSame현재의 경우 true입니다. 내부 튜플은 여러 개의 동등한 노드를 포함하는 것으로 표시됩니다(참조섹션 56.3.3). hasPrefix다음의 경우 true입니다. 현재 내부 튜플에는 접두사가 포함되어 있습니다. 그렇다면,prefixDatum그 값입니다.n노드은 다음에 포함된 하위 노드의 수입니다. 내부 튜플 및노드 라벨은 레이블 값의 배열이거나 레이블이 없으면 NULL입니다.

선택함수는 다음을 결정할 수 있습니다. 새 값이 기존 하위 노드 중 하나와 일치하는지, 또는 새 하위 노드를 추가해야 하거나 새 값이 튜플 접두사와 일치하지 않으므로 내부 튜플은 다음과 같아야 합니다. 덜 제한적인 접두사를 만들기 위해 분할합니다.

새 값이 기존 하위 노드 중 하나와 일치하면 설정결과유형spgMatchNode. 설정노드N노드 배열에 있는 해당 노드의 인덱스(0부터)로. 설정레벨추가증분으로레벨다음을 통해 하강하여 발생함 해당 노드를 사용하거나 연산자 클래스가 사용하지 않는 경우 0으로 둡니다. 수준. 설정restDatum동일하게데이텀연산자 클래스가 그렇지 않은 경우 한 레벨에서 다음 레벨로 데이텀을 수정하거나 다음으로 설정합니다. 사용할 수정된 값leafDatum다음 단계로.

새 하위 노드를 추가해야 하는 경우 설정결과유형spgAddNode. 설정노드 라벨새 라벨에 사용할 라벨 노드 및 설정노드N색인(에서 0) 노드 배열에 노드를 삽입할 위치입니다. 노드 이후 추가되었습니다.선택함수 수정된 내부 튜플로 다시 호출됩니다. 그 전화 결과는 다음과 같습니다.spgMatchNode결과.

새 값이 튜플 접두사와 일치하지 않는 경우 설정결과유형spgSplitTuple. 이 작업은 기존의 모든 항목을 이동합니다. 노드를 새로운 하위 수준 내부 튜플로 바꾸고 기존을 대체합니다. 새 노드에 연결되는 단일 노드를 갖는 튜플이 있는 내부 튜플 하위 수준 내부 튜플. 설정prefixHasPrefix새 항목인지 여부를 나타냅니다. 상위 튜플에는 접두사가 있어야 하며, 그렇다면 설정됩니다.prefixPrefixDatum접두사 값으로 변경됩니다. 이 새로운 접두사 값은 접두사 값보다 충분히 덜 제한적이어야 합니다. 인덱싱할 새 값을 허용하려면 원본이어야 하며 no여야 합니다. 원래 접두사보다 길다. 설정노드 라벨노드에 사용할 라벨에 이는 새로운 하위 수준 내부 튜플을 가리킬 것입니다. 설정postfixHasPrefix새 항목인지 여부를 나타냅니다. 하위 수준 내부 튜플에는 접두사가 있어야 하며, 그렇다면 설정됩니다.postfixPrefixDatum접두사로 가치. 이 두 접두사와 추가 접두사의 조합 레이블은 원래 접두사와 동일한 의미를 가져야 합니다. 이동된 노드 레이블을 변경할 수 있는 기회가 없습니다. 새로운 하위 수준 튜플을 삭제하거나 하위 인덱스 항목을 변경하지도 않습니다. 노드가 분할된 후,선택함수는 다음과 같이 다시 호출됩니다. 내부 튜플을 교체합니다. 해당 호출은 일반적으로spgAddNode결과, 아마도 분할 단계에서 추가된 노드 레이블은 새 값과 일치하지 않습니다. 그래서 그 후에 마침내 반환되는 세 번째 호출이 있을 것입니다.spgMatchNode다음 삽입을 허용합니다. 나뭇잎 수준으로 내려갑니다.

picksplit

리프 세트 위에 새로운 내부 튜플을 생성하는 방법을 결정합니다 튜플.

SQL선언 함수는 다음과 같아야 합니다:

CREATE FUNCTION my_picksplit(내부, 내부) 반환 무효 ...

첫 번째 인수는 a에 대한 포인터입니다.spgPickSplitIn입력 데이터를 포함하는 C 구조체 기능을 위해. 두 번째 인수는 a에 대한 포인터입니다.spgPickSplitOutC 구조체, 함수는 반드시 결과 데이터를 채워주세요.

typedef 구조체 spgPickSplitIn

    int nTuples;        /* 리프 튜플의 수 */
    데이텀 *데이텀;         /* 해당 데이텀(길이가 nTuples인 배열) */
    정수 수준;          /* 현재 레벨(0부터 계산) */
 spgPickSplitIn;

typedef 구조체 spgPickSplitOut

    bool hasPrefix;      /* 새로운 내부 튜플에는 접두사가 있어야 합니까? */
    데이텀 접두사Datum;    /* 그렇다면 그 값 */

    int nNodes;         /* 새로운 내부 튜플의 노드 수 */
    데이텀 *nodeLabels;     /* 해당 레이블(또는 레이블이 없는 경우 NULL) */

    int *mapTuplesToNodes;   /* 각 리프 튜플에 대한 노드 인덱스 */
    데이텀 *leafTupleDatums;    /* 각각의 새 리프 튜플에 저장할 데이터 */
 spgPickSplitOut;

n사설 토토잎의 수입니다 사설 토토이 제공됩니다.데이텀은 배열입니다 그들의 데이텀 값.레벨이것은 모든 리프 튜플이 공유하는 현재 수준. 새로운 내부 튜플의 수준입니다.

설정hasPrefix여부를 나타냄 새로운 내부 튜플에는 접두사가 있어야 하며, 그렇다면 설정됩니다.prefixDatum접두사 값으로. 세트n노드노드 수를 나타냅니다. 새로운 내부 튜플은 다음을 포함하고 설정됩니다.노드 라벨해당 라벨 값의 배열로. (노드에 라벨이 필요하지 않은 경우 설정합니다.노드 라벨NULL로; 참조섹션 56.3.2자세한 내용은.) 설정mapTuplesToNodes에 각 노드의 인덱스(0부터)를 제공하는 배열 리프 튜플을 할당해야 합니다. 설정leafTupleDatums값의 배열로 새 리프 사설 토토에 저장됩니다(이것은 입력과 동일합니다데이텀연산자 클래스가 그렇지 않은 경우 한 레벨에서 다음 레벨로 데이텀을 수정합니다. 참고하세요picksplit함수는 다음을 담당합니다. 팔로킹 중노드 라벨, mapTuplesToNodes그리고leafTupleDatums배열.

두 개 이상의 리프 튜플이 제공되면 다음이 예상됩니다.picksplit함수가 그들을 분류할 것입니다 둘 이상의 노드로 그렇지 않으면 분할이 불가능합니다. 여러 페이지에 걸쳐 리프 튜플을 생성하는 것이 궁극적인 목적입니다. 이 작업. 그러므로 만일picksplit함수는 모든 잎을 배치하는 것으로 끝납니다 동일한 노드에 튜플이 있으면 핵심 SP-GiST 코드가 이를 재정의합니다. 결정을 내리고 리프 튜플이 포함된 내부 튜플을 생성합니다. 동일하게 레이블이 지정된 여러 노드에 무작위로 할당됩니다. 그러한 튜플이 표시됨allTheSame그것을 의미합니다 이런 일이 일어났습니다.선택그리고내부_일관성함수는 다음을 수행해야 합니다. 그러한 내부 튜플을 적절하게 관리하십시오. 참조섹션 56.3.3더 많은 정보를 원하시면.

picksplit다음에 적용할 수 있습니다. 단일 리프 튜플은 다음과 같은 경우에만 해당구성기능 세트longValuesOKtrue로 설정하고 페이지보다 큼 입력값이 제공되었습니다. 이 경우의 요점은 작업은 접두사를 제거하고 새롭고 짧은 리프를 생성하는 것입니다. 데이텀 값. 호출은 리프 데이텀이 부족할 때까지 반복됩니다. 한 페이지에 꽉 차도록 제작되었습니다. 참조섹션 56.3.1용 자세한 정보.

내부_일관성

트리 동안 따라갈 노드(가지) 세트를 반환합니다. 검색하세요.

SQL선언 함수는 다음과 같아야 합니다:

CREATE FUNCTION my_inner_contant(내부, 내부) 반환 무효 ...

첫 번째 인수는 a에 대한 포인터입니다.spgInnerCondependentIn입력을 포함하는 C 구조체 기능에 대한 데이터입니다. 두 번째 인수는 a에 대한 포인터입니다.spgInnerCondependentOutC 구조체, 이는 함수는 결과 데이터로 채워야 합니다.

typedef 구조체 spgInnerCondependentIn

    ScanKey 스캔키;       /* 연산자 및 비교 값의 배열 */
    int nkeys;          /* 배열의 길이 */

    재구성된 데이터값;     /* 부모에서 재구성된 값 */
    정수 수준;          /* 현재 레벨(0부터 계산) */
    bool returnData;     /* 원본 데이터를 반환해야 합니까? */

    /* 현재 내부 튜플의 데이터 */
    bool allTheSame;     /* 튜플은 모두 동일하게 표시됩니까? */
    bool hasPrefix;      /* 튜플에 접두사가 있나요? */
    데이텀 접두사Datum;    /* 그렇다면 접두사 값 */
    int nNodes;         /* 내부 튜플의 노드 수 */
    데이텀 *nodeLabels;     /* 노드 레이블 값(없으면 NULL) */
 spgInner일관성In;

typedef 구조체 spgInnerCondependentOut

    int nNodes;         /* 방문할 자식 노드 수 */
    int *nodeNumbers;    /* 노드 배열의 인덱스 */
    int *levelAdds;      /* 각각에 대해 이만큼 레벨을 증가시킵니다 */
    데이텀 *reconstructedValues;    /* 관련 재구성된 값 */
 spgInnerCondependentOut;

배열스캔키, 길이n키, 색인 검색을 설명합니다. 조건. 이러한 조건은 AND와 결합됩니다 — 인덱스만 이 모든 것을 만족시키는 항목은 흥미롭습니다. (참고하세요n키= 0은 모든 색인이 항목은 쿼리를 만족합니다.) 일반적으로 일관된 기능만 신경 쓰인다sk_strategy그리고sk_argument각 배열의 필드 항목은 각각 인덱싱 가능한 연산자와 비교값. 특히 확인할 필요는 없습니다.sk_flags비교 여부를 확인하기 위해 값은 NULL입니다. 왜냐하면 SP-GiST 핵심 코드는 이러한 것을 필터링하기 때문입니다. 조건.reconstructedValue이것은 상위 튜플에 대해 재구성된 값입니다. 그것은(데이텀) 0루트 수준에서 또는 다음과 같은 경우내부_일관성함수가 값을 제공하지 않았습니다. 부모 수준에서.레벨이것은 현재 내부 튜플의 수준, 루트 수준의 경우 0부터 시작합니다.반환데이터is이를 위해 재구성된 데이터가 필요한 경우 쿼리; 이는 다음과 같은 경우에만 해당됩니다.구성함수 주장canReturnData. allTheSame현재 내부 튜플이 다음과 같은 경우 true입니다. 표시됨"모두 똑같아"; 이 경우에는 모두 노드는 동일한 레이블(있는 경우)을 가지므로 노드가 모두 또는 전혀 없습니다. 검색어와 일치합니다(참조섹션 56.3.3). hasPrefix다음의 경우 true입니다. 현재 내부 튜플에는 접두사가 포함되어 있습니다. 그렇다면,prefixDatum그 값입니다.n노드은 다음에 포함된 하위 노드의 수입니다. 내부 튜플 및노드 라벨은 레이블 값의 배열 또는 노드에 레이블 값이 없는 경우 NULL 라벨.

n노드개 수로 설정되어야 합니다. 검색을 통해 방문해야 하는 하위 노드 및노드번호다음의 배열로 설정되어야 합니다. 인덱스. 연산자 클래스가 레벨을 추적하는 경우 setlevelAdds레벨 배열에 방문할 각 노드로 내려갈 때 필요한 증분입니다. (종종 이러한 증분은 모든 노드에 대해 동일하지만 반드시 그런 것은 아니므로 배열이 사용됩니다.) 값이 재구성이 필요합니다. 설정reconstructedValues값 배열에 방문할 각 하위 노드에 대해 재구성됩니다. 그렇지 않으면 떠나세요reconstructedValuesNULL로. 참고하세요내부_일관성함수는 팔로킹을 담당합니다.노드번호, levelAdds그리고reconstructedValues배열.

leaf_condependent

리프 사설 토토이 쿼리를 만족하면 참을 반환합니다.

SQL선언 함수는 다음과 같아야 합니다:

CREATE FUNCTION my_leaf_contant(내부, 내부) RETURNS bool ...

첫 번째 인수는 a에 대한 포인터입니다.spgLeafCondependentIn입력을 포함하는 C 구조체 기능에 대한 데이터입니다. 두 번째 인수는 a에 대한 포인터입니다.spgLeafCondependentOutC 구조체, 이는 함수는 결과 데이터로 채워야 합니다.

typedef 구조체 spgLeafContantIn

    ScanKey 스캔키;       /* 연산자 및 비교 값의 배열 */
    int nkeys;          /* 배열의 길이 */

    재구성된 데이터값;     /* 부모에서 재구성된 값 */
    정수 수준;          /* 현재 레벨(0부터 계산) */
    bool returnData;     /* 원본 데이터를 반환해야 합니까? */

    데이텀 리프Datum;      /* 리프 튜플의 데이터 */
 spgLeaf일관적In;

typedef 구조체 spgLeafCondependentOut

    데이텀 리프값;      /* 원본 데이터가 있으면 재구성 */
    부울 재확인;        /* 연산자를 다시 확인해야 하는 경우 true로 설정 */
 spgLeafCondependentOut;

배열스캔키, 길이n키, 색인 검색을 설명합니다. 조건. 이러한 조건은 AND와 결합됩니다 — 인덱스만 이들 모두를 만족하는 항목이 쿼리를 만족시킵니다. (참고하세요n키= 0은 모든 색인이 항목은 쿼리를 만족합니다.) 일반적으로 일관된 기능만 신경 쓰인다sk_strategy그리고sk_argument각 배열의 필드 항목은 각각 인덱싱 가능한 연산자와 비교값. 특히 확인할 필요는 없습니다.sk_flags비교 여부를 확인하기 위해 값은 NULL입니다. 왜냐하면 SP-GiST 핵심 코드는 이러한 것을 필터링하기 때문입니다. 조건.reconstructedValue이것은 상위 튜플에 대해 재구성된 값입니다. 그것은(데이텀) 0루트 수준에서 또는 다음과 같은 경우내부_일관성함수가 값을 제공하지 않았습니다. 부모 수준에서.레벨이것은 현재 리프 튜플의 수준, 루트 수준의 경우 0부터 시작합니다.반환데이터is이를 위해 재구성된 데이터가 필요한 경우 쿼리; 이는 다음과 같은 경우에만 해당됩니다.구성함수 주장canReturnData. leafDatum은 현재에 저장된 키 값입니다. 리프 튜플.

함수는 반드시 반환되어야 합니다만약 리프 튜플이 쿼리와 일치하거나, 또는거짓만일 아닙니다. 에서케이스, if반환데이터is그런 다음잎값값으로 설정되어야 합니다. 원래는 이 리프 튜플에 대해 인덱싱되도록 제공되었습니다. 또한,다시 확인다음으로 설정될 수 있음일치가 불확실한 경우 연산자를 실제 힙 사설 토토에 다시 적용하여 확인해야 합니다. 경기.

모든 SP-GiST 지원 메소드는 일반적으로 단기 메모리 컨텍스트; 즉,CurrentMemoryContext처리 후 재설정됩니다 각 튜플의 그러므로 크게 걱정할 필요는 없습니다 당신이 palloc하는 모든 것을 해제합니다. (그구성방법은 예외입니다. 다음을 시도해야 합니다. 메모리 누수를 방지하세요. 그러나 일반적으로구성메소드는 할당 외에는 아무것도 하지 않아도 됩니다 전달된 매개변수 구조체에 상수를 추가합니다.)

인덱싱된 열이 조합 가능한 데이터 유형인 경우 인덱스는 데이터 정렬은 다음을 사용하여 모든 지원 방법에 전달됩니다. 표준PG_GET_COLLATION()메커니즘.