70.3. 확장 성#

the인터페이스는 높은 수준의 추상화를 가지고있어 액세스 방법 구현자가 액세스하는 데이터 유형의 의미를 구현해야합니다. 그만큼레이어 자체는 동시성, 트리 구조 로깅 및 검색을 처리합니다.

a를 얻는 데 필요한 모든 것액세스 방법 작업은 트리의 키의 동작과 키, 스포츠 토토 사이트 항목 및 색인 가능한 쿼리 간의 관계를 정의하는 몇 가지 사용자 정의 메소드를 구현하는 것입니다. 요컨대확장 성과 일반성, 코드 재사용 및 깨끗한 인터페이스를 결합합니다.

운영자가 클래스하는 두 가지 방법이 있습니다제공해야합니다 :

Datum *ExtractValue (Datum itemvalue, int32 *nkeys, bool ** nullflags)

스포츠 토토 사이트 할 항목이 주어진 Palloc'd Keys를 반환합니다. 반환 된 키의 수는에 저장되어야합니다.*nkeys. 키가 null 일 수 있다면 Palloc a array*nkeys bool필드, 주소를 저장*nullflags,이 널 플래그를 필요에 따라 설정합니다.*nullflags남을 수 있습니다NULL(초기 값) 모든 키가 null이 아닌 경우. 반환 값은입니다.null항목에 키가 없으면

Datum *ExtractQuery (Datum Query, int32 *nkeys, StrategyNumber N, Bool ** PMATCH, 포인터 ** extra_data, bool ** nullflags, int32 *searchmode)

쿼리 할 값이 주어진 Palloc'd Keys를 반환합니다. 즉,쿼리왼쪽이 색인화 된 열인 스포츠 토토 사이트 가능한 연산자의 오른쪽에있는 값입니다.n운영자 클래스 내 운영자의 전략 번호입니다 (참조섹션 38.16.2). 자주,ExtractQuery상담해야합니다n데이터 유형을 결정하려면쿼리및 주요 값을 추출하는 데 사용해야하는 메소드. 반환 된 키의 수는에 저장되어야합니다.*nkeys. 키가 null 일 수 있다면 Palloc a array*nkeys bool필드, 주소를 저장*nullflags,이 널 플래그를 필요에 따라 설정합니다.*nullflags남겨질 수 있습니다null(초기 값) 모든 키가 null이 아닌 경우. 반환 값은입니다.nullIF쿼리열쇠가 포함되어 있습니다.

SearchMode허용하는 출력 인수입니다ExtractQuery검색 수행 방법에 대한 세부 정보를 지정합니다. 만약에*SearchMode로 설정되었습니다gin_search_mode_default(전화 전에 초기화 된 값), 반환 된 키 중 하나 이상 일치하는 항목 만 후보 일치로 간주됩니다. 만약에*SearchMode로 설정되었습니다gin_search_mode_include_empty, 그 다음 하나 이상의 일치 키가 포함 된 항목 외에도 키가 전혀없는 항목은 후보 일치로 간주됩니다. (이 모드는 예를 들어 IS 서브 세트 오퍼레이터를 구현하는 데 유용합니다.) if*SearchModegin_search_mode_all, 스포츠 토토 사이트의 모든 널 비 널 항목은 반환 된 키와 일치하는지 여부에 관계없이 후보 일치로 간주됩니다. (이 모드는 본질적으로 전체 스포츠 토토 사이트를 스캔해야하므로 다른 두 가지 선택보다 훨씬 느립니다. 그러나 코너 케이스를 올바르게 구현해야 할 수도 있습니다. 대부분의 경우이 모드가 필요한 연산자는 아마도 진 운영자 클래스를위한 좋은 후보가 아닐 것입니다.)이 모드를 설정하는 데 사용하는 기호는에 정의되어 있습니다.access/gin.h.

PMATCH부분 일치가 지원 될 때 사용하기위한 출력 인수입니다. 사용하려면ExtractQuerymust allocate an array of*nkeys bools와 주소를 보관하십시오.*PMATCH. 해당 키에 부분 일치가 필요한 경우 배열의 각 요소가 true로 설정되어야합니다. 만약에*PMATCHNULL그런 다음 진은 부분 일치가 필요하지 않다고 가정합니다. 변수가 초기화되어NULL호출하기 전에,이 인수는 부분 일치를 지원하지 않는 운영자 클래스에서 단순히 무시할 수 있습니다.

extra_data허용하는 출력 인수입니다ExtractQuery추가 데이터를 전달하려면일관성and비교파방법. 사용하려면ExtractQuery배열을 할당해야합니다*nkeys주소를 포인터로 보관하고*엑스트라 _data, 그런 다음 원하는 것을 개별 포인터에 보관하십시오. 변수가 초기화되어NULL호출하기 전에이 인수는 추가 데이터가 필요하지 않은 운영자 클래스에서 단순히 무시할 수 있습니다. 만약에*엑스트라 _data설정되어 전체 배열이에 전달됩니다.일관성메소드 및 적절한 요소비교적메소드

운영자 클래스는 인덱스 된 항목이 쿼리와 일치하는지 확인하는 기능을 제공해야합니다. 그것은 두 가지 맛으로 온다, 부울일관성함수 및 3 대triconsistent기능.triconsistent두 기능을 다루므로 제공triconsistent단독으로 충분합니다. 그러나 부울 변형이 계산하기가 상당히 저렴한 경우 둘 다를 제공하는 것이 유리할 수 있습니다. 부울 변형 만 제공되는 경우 모든 키를 가져 오기 전에 스포츠 토토 사이트 항목을 반박하는 데 의존하는 일부 최적화가 비활성화됩니다.

BOOL 일관성 (BOOL Check [], StrategyNumber N, Datum Query, Int32 Nkeys, Pointer extra_data [], bool *Recheck, Datum QueryKeys [], bool nullflags [])

인덱스 된 항목이 전략 번호로 쿼리 연산자를 만족시키는 경우 true를 반환합니다n(또는 재확인 표시가 반환되는 경우이를 만족시킬 수도 있음). 이 기능은 이후로 인덱싱 된 항목의 값에 직접 액세스하지 못합니다.품목을 명시 적으로 저장하지 않습니다. 오히려, 사용 가능한 것은 쿼리에서 추출한 주요 값이 주어진 인덱스 항목에 나타나는 지식입니다. 그만큼check배열 길이nkeys, 이는 이전에 반환 한 키의 수와 동일합니다ExtractQuery이것쿼리Datum. 의 각 요소check인덱스 항목에 해당 쿼리 키가 포함 된 경우 배열이 사실입니다.ExtractQuery결과 배열은 스포츠 토토 사이트 항목에 있습니다. 원래쿼리Datum은의 경우 전달됩니다일관성방법을 참조해야합니다.QueryKeys []andnullflags []이전에 반품 배열ExtractQuery. extra_dataExtra-Data 배열은입니다.ExtractQuery또는NULL없음.

whenExtractQueryNULL 키를 반환합니다QueryKeys [], 해당check []인덱스 항목에 null 키가 포함 된 경우 요소가 참입니다. 즉,의 의미론check []|. 그만큼일관성함수는 해당하는 것을 검사 할 수 있습니다nullflags []정기적 인 값 일치와 널 매치의 차이를 알려야 할 경우 요소

성공,*재전송힙 튜플을 쿼리 연산자에 대해 재확인 해야하는 경우 또는 인덱스 테스트가 정확한 경우 False로 설정해야합니다. 즉, 허위 반환 값은 힙 튜플이 쿼리와 일치하지 않도록 보장합니다. 의 진정한 반환 값*재확인힙 튜플이 쿼리와 일치한다는 것을 허위로 설정합니다. 그리고의 진정한 반환 값*재전송True로 설정된 힙 튜플이 쿼리와 일치 할 수 있음을 의미하므로 원래 인덱스 항목에 대해 쿼리 연산자를 직접 평가하여 가져 와서 다시 확인해야합니다..

GinternaryValue triconsistent (GinternaryValue check [], StrategyNumber N, Datum Query, int32 nkeys, pointer extra_data [], datum querykeys [], bool nullflags [])

triconsistent일관성, 그러나 부울 대신check벡터, 각 키에 대한 세 가지 가능한 값이 있습니다.gin_true, gin_falseandgin_maybe. gin_falseandgin_true일반 부울 값과 동일한 의미를 지니고gin_maybe는 해당 키의 존재가 알려져 있지 않음을 의미합니다. 언제gin_maybe값이 존재하고 함수는 반환해야합니다gin_true인덱스 항목에 해당 쿼리 키가 포함되어 있는지 여부에 관계없이 항목이 확실히 일치하는 경우. 마찬가지로 함수는 반환해야합니다gin_false항목이 확실히 일치하지 않는 경우에만gin_maybe키. 결과가에 의존하는 경우gin_maybe항목, 즉, 알려진 쿼리 키에 따라 일치를 확인하거나 반박 할 수 없으므로 함수는 반환해야합니다gin_maybe.

없을 때gin_maybecheckVector, Agin_maybereturn 값은 설정과 동일합니다다시 확인부울의 깃발일관성기능.

또한 Gin은 스포츠 토토 사이트에 저장된 주요 값을 정렬 할 수있는 방법이 있어야합니다. 연산자 클래스는 비교 방법을 지정하여 정렬 순서를 정의 할 수 있습니다.

int 비교 (Datum A, Datum B)

두 개의 키를 비교하고 (색인 된 항목이 아님) 0, 0 또는 0보다 작은 정수를 반환하여 첫 번째 키가 두 번째 키보다 적은지 또는 크지 여부를 나타냅니다. 널 키는이 기능으로 전달되지 않습니다.

또는 운영자 클래스가 A를 제공하지 않는 경우비교메소드, Gin은 인덱스 키 데이터 유형에 대한 기본 BTREE 연산자 클래스를 찾아 비교 함수를 사용합니다. Btree 운영자 클래스를 찾는 데 몇주기가 비용이 들기 때문에 하나의 데이터 유형만을 의미하는 GIN 연산자 클래스에서 비교 함수를 지정하는 것이 좋습니다. 그러나 다형성 진 운영자 클래스 (예 :array_ops) 일반적으로 단일 비교 함수를 지정할 수 없습니다.

운영자 클래스선택적으로 다음 방법을 제공 할 수 있습니다.

int comparePartial (Datum partial_key, Datum Key, StrateghtNumber N, Pointer extrac_data)

부분-일치 쿼리 키를 색인 키와 비교합니다. 부호가 결과를 나타내는 정수를 반환합니다. 0보다 작 으면 인덱스 키가 쿼리와 일치하지 않지만 인덱스 스캔이 계속되어야합니다. 0은 인덱스 키가 쿼리와 일치 함을 의미합니다. 0보다 큰 것은 더 이상 일치 할 수 없기 때문에 인덱스 스캔이 중지되어야 함을 나타냅니다. 전략 번호n부분 일치 쿼리를 생성 한 연산자의 스캔을 종료 할시기를 결정하는 데있어 시맨틱이 필요합니다. 또한,extra_dataExtractQuery또는NULL없음. 널 키는이 기능으로 전달되지 않습니다.

무효 옵션 (local_relopts *repopts)

운영자 클래스 동작을 제어하는 ​​사용자가 가시 가능한 매개 변수 세트를 정의합니다.

the옵션함수는 A로 포인터가 전달됩니다local_reloptsSTRUCT는 일련의 운영자 클래스 특정 옵션으로 채워야합니다. 옵션은를 사용하여 다른 지원 기능에서 액세스 할 수 있습니다.pg_has_opclass_options ()pg_get_opclass_options ()매크로

스포츠 토토 사이트 값의 키 추출과 키의 표현 이후융통성이 있으며 사용자 지정 매개 변수에 의존 할 수 있습니다.

지원하려면부분 경기쿼리, 운영자 클래스는를 제공해야합니다.비교파메소드 및 그ExtractQuery메소드를 설정해야합니다PMATCH매개 변수 부분 매치 쿼리가 발생한 경우. 보다섹션 70.4.2자세한 내용.

다양한 데이터 유형Datum위에서 언급 한 값은 운영자 클래스에 따라 다릅니다. 항목 값이 전달되었습니다ExtractValue항상 운영자 클래스의 입력 유형이므로 모든 주요 값은 클래스의 여야합니다스토리지타입. 의 유형쿼리인수가 전달되었습니다ExtractQuery, 일관성andtriconsistent전략 번호로 식별 된 클래스 멤버 연산자의 오른쪽 입력 유형이 무엇이든. 올바른 유형의 주요 값을 추출 할 수있는 한 스포츠 토토 사이트 유형과 동일 할 필요는 없습니다. 그러나이 세 가지 지원 기능의 SQL 선언은에 OPCLASS의 스포츠 토토 사이트 데이터 유형을 사용하는 것이 좋습니다.쿼리인수, 실제 유형이 연산자에 따라 다른 것일 수 있지만

정정 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면