표 38.9, Btree는 필요한 하나와 4 개의 선택적 사설 토토 사이트 기능을 정의합니다. 5 가지 사용자 정의 방법은 다음과 같습니다.
Order
BTREE 운영자 제품군이 비교 연산자에게 제공하는 데이터 유형의 각 조합에 대해 비교 사설 토토 사이트 기능을 제공해야합니다.PG_AMPROC
사설 토토 사이트 기능 번호 1 및amproclefttype
/amprocrighttype
비교를 위해 왼쪽 및 오른쪽 데이터 유형과 동일합니다 (즉, 일치하는 연산자가 in에 등록되는 동일한 데이터 유형pg_amop
). 비교 함수는 두 개의 null 값을 취해야합니다a
andB
그리고 반환int32
그 값<
0
, 0
또는
0
whena
<
B
, a
=
B
또는a
B
8466_8565src/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 (val
type1,base
type1,오프셋
type2,sub
bool,Less
bool) 반품 bool
val
andbase
동일한 유형이어야합니다.이 유형은 운영자 제품군이 사설 토토 사이트하는 유형 중 하나입니다 (즉, 주문을 제공하는 유형). 하지만,오프셋
다른 유형 일 수 있으며, 그렇지 않으면 가족이 사설 토토 사이트하지 않을 수 있습니다. 예를 들어 내장time_ops
가족 제공in_Range
오프셋
OF TYPE간격
. 가족이 제공 할 수 있습니다in_Range
사설 토토 사이트되는 유형의 기능 및 하나 이상의 기능오프셋
유형. 각in_Range
함수를 입력해야합니다pg_amproc
withamproclefttype
동일type1
andamprocrighttype
동일type2
.
in_Range
함수는 두 부울 플래그 매개 변수에 따라 다릅니다. 추가하거나 빼야base
and오프셋
, 그런 다음 비교val
결과는 다음과 같이 :
if!
sub
및!
Less
, returnval
=
(Base
+
오프셋
)
if!
sub
andLess
, returnval
<=
(Base
+
오프셋
)
ifsub
and!
Less
, returnval
=
(Base
-
오프셋
)
ifsub
andLess
, returnval
<=
(베이스
-
오프셋
)
그렇게하기 전에 함수는의 부호를 확인해야합니다.오프셋
: 0보다 작은 경우 오류를 올리십시오errcode_invalid_preceding_or_following_size
(22013) 오류 텍스트와 같은“창 함수의 이전 또는 다음 크기 전 또는 다음 크기”. (비표준 운영자 패밀리는 아마도이 제한을 무시하기로 선택할 수 있지만 SQL 표준에 의해 필요합니다. 이에 대한 의미 론적 필요성이 거의 없기 때문에이 요구 사항은에 위임된다.in_Range
핵심 코드가 무엇을 이해할 필요가 없도록 함수“0보다 작음”특정 데이터 유형을 의미합니다.
추가적인 기대는입니다.in_Range
함수는 실용적이라면 오류를 던지지 않아야합니다.base
+
오프셋
또는Base
-
오프셋
오버플로. 해당 값이 데이터 유형 범위를 벗어난 경우에도 올바른 비교 결과를 결정할 수 있습니다. 데이터 유형에과 같은 개념이 포함 된 경우“Infinity”또는“Nan”in_Range
의 결과는 운영자 제품군의 정상 정렬 순서에 동의합니다.
결과의 결과in_Range
함수는 운영자 제품군이 부과하는 정렬 순서와 일치해야합니다. 고정 된 값이를 감안할 때 정확하게오프셋
andsub
, 다음 :
ifin_Range
withLess
= 일부는 참입니다val1
andBase
, 모든 것에 대해 사실이어야합니다val2
<=
val1
같은베이스
.
ifin_Range
withLess
= true는 일부는 거짓입니다val1
andBase
, 모든 것에 대해 거짓이어야합니다val2
=
val1
같은base
.
ifin_Range
withLess
= 일부는 참입니다val
andBase1
, 모든 것에 대해 사실이어야합니다Base2
=
Base1
같은val
.
ifin_Range
withLess
= true는 일부는 거짓입니다val
andBase1
, 모든 것에 대해 거짓이어야합니다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에 대한 정적 정보입니다. 반환true
Order
운영자 클래스의 함수는 반품 만 보장됩니다0
(“인수는 동등합니다”) 때a
andB
인수는 의미 정보의 손실 없이도 상호 교환 할 수 있습니다. 등록하지 않음EqualImage
기능 또는 반환거짓
이 조건을 보유 할 수 없음을 나타냅니다.
theopcintype
인수는
운영자 클래스 인덱스 인 데이터 유형의. 이것은 동일한 기본을 재사용 할 수있는 편의입니다pg_type
.OidEqualImage
운영자 클래스에서 기능. 만약에opcintype
는 Collatable Data Type입니다. 적절한 Collation OID가 전달됩니다.EqualImage
표준 사용 함수pg_get_collation ()
메커니즘.
운영자 클래스에 관한 한, 반환true
중복 제거가 안전하다는 것을 나타냅니다 (또는 OID가 전달 된 Collation에 안전합니다EqualImage
함수). 그러나 핵심 코드는 인덱스에 대한 중간 복제 만 안전하다고 간주합니다.Everyindexed 컬럼을 등록하는 연산자 클래스를 사용합니다EqualImage
함수, 그리고 각 함수는 실제로 반환true
전화 할 때.
이미지 평등은거의간단한 비트 평등과 동일한 조건. 한 가지 미묘한 차이가 있습니다 : Varlena 데이터 유형을 색인화 할 때, 두 이미지 동등한 기준의 온 디스크 표현은 일관되지 않은로 인해 약간 동일하지 않을 수 있습니다.토스트입력시 압축. 공식적으로 운영자 클래스의 경우EqualImage
함수 반환true
datum_image_eq ()
C 함수는 항상 운영자 클래스와 동의합니다Order
22261_22333EqualImage
andOrder
함수).
핵심 코드는 근본적으로를 추론 할 수 없습니다“평등은 이미지 평등을 암시합니다”동일한 가족의 다른 운영자 클래스의 세부 사항을 기반으로 다중 데이터 유형 패밀리 내 운영자 클래스 상태. 또한 운영자 가족이 크로스 타입을 등록하는 것은 합리적이지 않습니다.EqualImage
함수와 그렇게하려고 시도하면 오류가 발생합니다. 이건이기 때문입니다.“평등은 이미지 평등을 암시합니다”상태는 운영자 가족 수준에서 다소 정의되는 정렬/평등 의미에 의존하지 않습니다. 일반적으로 특정 데이터 유형이 구현하는 의미는 별도로 고려되어야합니다.
컨벤션과 핵심에 포함 된 운영자 클래스가 뒤 따릅니다PostgreSQL배포는 주식을 등록하는 것입니다EqualImage
함수. 대부분의 운영자 클래스 레지스터btequalimage ()
, 이는 중복 제거가 무조건 안전하다는 것을 나타냅니다. 와 같은 협의 가능한 데이터 유형에 대한 운영자 클래스텍스트
레지스터btvarstrequalimage ()
, 이는 중복 제거가 결정 론적 콜라이트로 안전하다는 것을 나타냅니다. 타사 확장에 대한 모범 사례는 제어를 유지하기 위해 자신의 사용자 지정 기능을 등록하는 것입니다.
옵션
선택적으로, B- 트리 운영자 제품군이 제공 할 수 있습니다옵션
(“운영자 클래스 특정 옵션”) 사설 토토 사이트 기능 번호 5에 등록 된 사설 토토 사이트 함수.
an옵션
사설 토토 사이트 함수는 서명이 있어야합니다
옵션 (Rekopts
local_relopts *
) 반환 void
함수는 a에 포인터가 전달됩니다.local_relopts
구조물은 일련의 운영자 클래스 특정 옵션으로 채워야합니다. 옵션은를 사용하여 다른 사설 토토 사이트 기능에서 액세스 할 수 있습니다.pg_has_opclass_options ()
andpg_get_opclass_options ()
매크로
현재, B-Tree 운영자 클래스가 없음옵션
사설 토토 사이트 기능. B-Tree는 Gist, SP-Gist, Gin 및 Brin과 같은 키를 유연하게 표현할 수 없습니다. 그래서,옵션
현재 B-Tree 인덱스 액세스 방법에 많은 응용 프로그램이 없을 것입니다. 그럼에도 불구하고,이지지 함수는 균일 성을 위해 B- 트리에 추가되었으며, 아마도 B- 트리의 추가 진화 중에PostgreSQL.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면