64.3. B- 트리 윈 토토 기능

표 38.9, Btree는 필요한 하나와 4 개의 선택적 윈 토토 기능을 정의합니다. 5 가지 사용자 정의 방법은 다음과 같습니다.

Order

BTREE 운영자 제품군이 비교 연산자에게 제공하는 데이터 유형의 각 조합에 대해, 등록 된 비교 윈 토토 기능을 제공해야합니다PG_AMPROC윈 토토 기능 번호 1 및amproclefttype/amprocrighttype비교를 위해 왼쪽 및 오른쪽 데이터 유형과 동일합니다 (즉, 일치하는 연산자가 in에 등록되는 동일한 데이터 유형PG_AMOP). 비교 함수는 두 개의 null 값을 취해야합니다aandB그리고 반환 anint32그 값< 0, 0또는 0언제a < B, a = B또는a B8331_8430src/backend/access/nbtree/nbtcompare.c예제.

비교 값이 Collatable 데이터 유형 인 경우 적절한 Collation OID는 표준을 사용하여 비교 윈 토토 기능으로 전달됩니다.pg_get_collation ()메커니즘.

SortsUpport

선택적으로, Btree 운영자 가족이 제공 할 수 있습니다정렬 윈 토토윈 토토 기능 번호 2에 등록 된 함수.이 기능은 비교 윈 토토 기능을 순진하게 호출하는 것보다 더 효율적인 방식으로 정렬 목적으로 비교를 구현할 수 있습니다. 이것에 관련된 API는에 정의됩니다.src/include/utils/sortsupport.h.

in_Range

선택적으로 Btree 운영자 가족이 제공 할 수 있습니다in_Range윈 토토 기능 기능 번호 3에 등록 된 윈 토토 기능. BTREE 지수 작업 중에 사용되지 않습니다. 오히려, 그들은 운영자 가족의 의미를 확장하여을 포함하는 창 절을 윈 토토할 수 있습니다.범위 오프셋 선행and범위 오프셋 다음프레임 바운드 유형 (참조섹션 4.2.8). 기본적으로 제공된 추가 정보는 AD를 추가하거나 빼는 방법입니다.오프셋가족의 데이터 순서와 호환되는 방식으로 가치가 있습니다.

anin_Range함수는 서명이 있어야합니다

in_Range (valtype1,basetype1,오프셋type2,subbool,Lessbool)
반품 bool

valandbase동일한 유형이어야합니다.이 유형은 운영자 제품군이 윈 토토하는 유형 중 하나입니다 (즉, 주문을 제공하는 유형). 하지만,오프셋다른 유형 일 수 있으며, 그렇지 않으면 가족이 윈 토토하지 않을 수 있습니다. 예를 들어 내장time_ops가족 제공in_Range오프셋OF TYPE간격. 가족이 제공 할 수 있습니다in_Range윈 토토되는 유형의 기능 및 하나 이상의 기능오프셋유형. 각in_Range함수를 입력해야합니다pg_amprocwithamproclefttype동일type1andamprocrighttype동일type2.

an의 필수 의미in_Range함수는 두 부울 플래그 매개 변수에 따라 다릅니다. 추가하거나 빼야Baseand오프셋, 그런 다음 비교val결과는 다음과 같이 다음과 같습니다.

  • if!suband!Less, returnval =(베이스 + 오프셋)

  • if!subandLess, returnval <=(Base + 오프셋)

  • ifsuband!Less, returnval =(베이스 - 오프셋)

  • ifsubLess, returnval <=(base - 오프셋)

그렇게하기 전에 함수는의 부호를 확인해야합니다.오프셋: 0보다 작은 경우 오류를 올리십시오errcode_invalid_preceding_or_following_size(22013) 오류 텍스트와 같은창 함수의 이전 또는 다음 크기 전 또는 다음 크기. (비표준 운영자 패밀리는 아마도이 제한을 무시하기로 선택할 수 있지만 SQL 표준에 의해 필요합니다. 이에 대한 의미 론적 필요성이 거의 없기 때문에이 요구 사항은에 위임된다.in_Range핵심 코드가 무엇을 이해할 필요가 없도록 함수0보다 작음특정 데이터 유형을 의미합니다.

추가 기대는입니다.in_Range함수는 실용적이라면 오류를 던지지 않아야합니다.base + 오프셋또는베이스 - 오프셋오버플로. 해당 값이 데이터 유형 범위를 벗어난 경우에도 올바른 비교 결과를 결정할 수 있습니다. 데이터 유형에과 같은 개념이 포함 된 경우Infinity또는Nanin_Range의 결과는 운영자 제품군의 정상 정렬 순서에 동의합니다.

결과의 결과in_Range함수는 운영자 제품군이 부과하는 정렬 순서와 일치해야합니다. 고정 된 값이를 감안할 때 정확하게오프셋sub, 다음 :

  • ifin_RangewithLess= 일부는 참입니다val1andBase, 모든 것에 대해 사실이어야합니다Val2 <= val1같은Base.

  • ifin_RangewithLess= 일부는 일부는 falseVal1andBase, 모든 것에 대해 거짓이어야합니다val2 = val1같은Base.

  • ifin_RangewithLess= 일부는 참입니다valandBase1, 모든 것에 대해 사실이어야합니다Base2 = Base1같은val.

  • ifin_RangewithLess= 일부는 일부는 falsevalandBase1, 모든 것에 대해 거짓이어야합니다Base2 <= Base1같은val.

반전 된 조건을 가진 유사한 진술은Less= false.

순서가있는 경우 (type1)는 Collatable입니다. 적절한 Collation OID가 전달됩니다in_Range표준 pg_get_collation () 메커니즘을 사용하여 함수.

in_Range함수는 널 입력을 처리 할 필요가 없으며 일반적으로 엄격하게 표시됩니다.

EqualImage

선택적으로 Btree 운영자 가족이 제공 할 수 있습니다EqualImage(평등은 이미지 평등을 암시합니다) 윈 토토 기능 번호 4에 등록 된 윈 토토 함수.이 기능을 사용하면 핵심 코드가 BTREE 중복 제거 최적화를 적용하는 것이 안전한시기를 결정할 수 있습니다. 현재,EqualImage기능은 색인을 구축하거나 재건 할 때만 호출됩니다.

anEqualImage함수는 서명이 있어야합니다

EqualImage (opcintype OID) BOOL을 반환

반환 값은 운영자 클래스 및 Collation에 대한 정적 정보입니다. 반환TrueOrder운영자 클래스의 기능은 반품 만 보장됩니다0(인수는 동등합니다) 때aandB인수는 의미 론적 정보의 손실 없이도 상호 교환 할 수 있습니다. 등록하지 않음EqualImage기능 또는 반환거짓이 조건을 보유 할 수 없음을 나타냅니다.

theopcintype인수는pg_type.Oid운영자 클래스 인덱스 인 데이터 유형의. 이것은 동일한 기본을 재사용 할 수있는 편의입니다EqualImage운영자 클래스에서 기능. 만약에opcintype는 Collatable Data 유형이며, 적절한 Collation OID가 전달됩니다.EqualImage표준 사용pg_get_collation ()메커니즘.

운영자 클래스에 관한 한, 반환true중복 제거가 안전하다는 것을 나타냅니다 (또는 OID가 전달 된 Collation에 안전합니다EqualImage함수). 그러나 핵심 코드는 인덱스에 대한 중간 복제 만 안전하다고 간주합니다.Everyindexed 열은 an을 등록하는 연산자 클래스를 사용합니다.EqualImage함수 및 각 함수는 실제로 반환true전화 할 때.

이미지 평등은거의간단한 비트 평등과 동일한 조건. 한 가지 미묘한 차이가 있습니다 : Varlena 데이터 유형을 색인화 할 때, 두 이미지 동등한 기준의 온 디스크 표현은 일관되지 않은로 인해 약간 동일하지 않을 수 있습니다.토스트입력시 압축. 공식적으로 운영자 클래스의 경우EqualImage함수 반환truedatum_image_eq ()C 함수는 항상 운영자 클래스와 동의합니다Order함수 (동일한 Collation OID가 두 사람 모두에게 전달되는 경우EqualImageandOrder함수).

핵심 코드는 근본적으로를 추론 할 수 없습니다평등은 이미지 평등을 암시합니다같은 가족의 다른 운영자 클래스의 세부 사항을 기반으로 다중 데이터 유형 패밀리 내 운영자 클래스 상태. 또한 운영자 가족이 크로스 타입을 등록하는 것은 합리적이지 않습니다.EqualImage함수와 그렇게하려고 시도하면 오류가 발생합니다. 이건이기 때문입니다.평등은 이미지 평등을 암시합니다상태는 운영자 가족 수준에서 다소 정의되는 분류/평등 의미에 의존하지 않습니다. 일반적으로 특정 데이터 유형이 구현하는 의미는 별도로 고려되어야합니다.

컨벤션과 Core에 포함 된 운영자 클래스가 뒤 따릅니다postgresql배포는 주식을 등록하는 것입니다EqualImage함수. 대부분의 운영자 클래스 레지스터btequalimage (), 이는 중복 제거가 무조건 안전하다는 것을 나타냅니다. 와 같은 협의 가능한 데이터 유형에 대한 운영자 클래스텍스트레지스터btvarstrequalimage (), 이는 중복 제거가 결정 론적 콜라이트로 안전하다는 것을 나타냅니다. 타사 확장에 대한 모범 사례는 제어를 유지하기 위해 자신의 사용자 지정 기능을 등록하는 것입니다.

옵션

선택적으로, B- 트리 운영자 제품군이 제공 할 수 있습니다옵션(운영자 클래스 특정 옵션) 윈 토토 함수 번호 5에 등록 된 윈 토토 함수.

an옵션윈 토토 함수는 서명이 있어야합니다

옵션 (Rekopts local_relopts *) 반환 void

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

현재 B-Tree 운영자 클래스는가 없습니다.옵션윈 토토 기능. B-Tree는 Gist, SP-Gist, Gin 및 Brin과 같은 키를 유연하게 표현할 수 없습니다. 그래서,옵션현재 B-Tree 인덱스 액세스 방법에 많은 응용 프로그램이 없을 것입니다. 그럼에도 불구하고,이지지 함수는 균일 성을 위해 B- 트리에 추가되었으며, 아마도 B- 트리의 추가 진화 중에PostgreSQL.

정정 제출

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