이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 36.16. 와이즈 토토에 대한 확장 인터페이스버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

33.14. 인터페이스

지금까지 설명한 절차를 통해 새로운 유형을 정의 할 수 있습니다.운영자 클래스

참고 :이전PostgreSQL릴리스 7.3, 필요했습니다pg_amop,pg_amprocpg_opclassa운영자 클래스 만들기

33.14.1.

thePG_AM테이블에는 하나가 포함되어 있습니다PostgreSQL이지만 모든 토토 커뮤니티 방법이 있습니다PG_AM. 그것은PG_AM- 그러나 그것은 이것의 범위를 벗어납니다PostgreSQL : 문서 : 8.2 : 색인 액세스 방법 사설 토토 사이트 정의).

토토 커뮤니티 방법의 루틴은 직접 알지 못합니다.운영자여기서-Clause 작업자와 함께 사용할 수 있습니다지원 절차여기서-Clase 연산자와 함께 사용할 수 있습니다

동일한 연산자 클래스 이름을 여러 곳에서 사용할 수 있습니다.int4_ops), 그러나 그러한 클래스는 독립적입니다

33.14.2. 색인 메소드 전략

운영자 클래스와 관련된 연산자는 다음과 같습니다"전략 번호",""보다 작습니다.and""보다 크거나 동일합니다.흥미 롭습니다PostgreSQL사용자가 정의 할 수 있습니다postgresql할 수 없습니다<또는 =) 그리고 말하고 말하십시오"전략"

B- 트리 색인 메소드는 5 가지 전략을 정의합니다.테이블.

표 33-2. B- 트리 전략

작동 전략 번호
1
작거나 평등 한 2
동등한 3
더 크거나 평등 4
보다 큰 5

해시 토토 커뮤니티는 비트 동등성 만 표현하므로 사용합니다.표 33-3.

표 33-3. 해시 전략

작동 전략 번호
Equal 1

GIST 토토 커뮤니티는 훨씬 더 유연합니다."일관성"각 특정의 지원 루틴"r-tree"전략테이블. 이 중 4 개는 진정한 2 차원 테스트입니다

표 33-4. GIST 2 차원"r-tree"전략

작동 전략 번호
엄격하게 왼쪽 1
오른쪽으로 확장되지 않습니다 2
오버랩 3
왼쪽으로 확장되지 않습니다 4
엄격히 5
동일 6
포함 7
포함 8
위에 확장되지 않습니다 9
엄격하게 아래 10
엄격하게 위 11
아래에 확장되지 않습니다 12

진 토토 커뮤니티는 유연성의 GIST 토토 커뮤니티와 유사합니다.표 33-5.

표 33-5. 진 배열 전략

작동 전략 번호
오버랩 1
포함 2
3
Equal 4

모든 전략 운영자는 부울 값을 반환합니다. ~ 안에부울여기서토토 커뮤니티와 함께 사용할 조항.

그건 그렇고,Amorderstrategy열에서 열PG_AMAmorderstrategy입니다Amorderstrategy= 1,""보다 작습니다.전략 번호.

33.14.3. 색인 방법 지원

전략은 일반적으로 시스템에 대한 정보가 충분하지 않습니다

전략과 마찬가지로 운영자 클래스는 어떤 식별합니다"지원 기능 번호".

B- 트리는 단일 지원 함수가 필요합니다.표 33-6.

표 33-6. B- 트리 지원 기능

기능 지원 번호
두 키를 비교하고 정수를보다 적게 반환하십시오 1

해시 인덱스 마찬가지로 하나의 지원 함수가 필요합니다.테이블.

표 33-7. 해시 지원 기능

기능 지원 번호
키의 해시 값 계산 1

GIST 인덱스에는 7 개의 지원 함수가 필요합니다.테이블.

표 33-8. GIST 지원 기능

기능 지원 번호
일관성 - 키가 만족되는지 여부를 결정하십시오 1
Union -Compute Union of a Keys 2
압축 - 압축 된 표현을 계산합니다 3
압축 압력 - 감압 된 표현을 계산합니다 4
페널티 - 새 키 삽입을위한 페널티 컴퓨팅 5
PickSplit- 페이지의 항목이 어떤지 결정하십시오 6
동일 - 두 키를 비교하고 진정으로 반환 7

진 인덱스에는 네 가지 지원 함수가 필요합니다.테이블.

표 33-9. 진 지원 기능

기능 지원 번호
비교 - 두 키를 비교하고 정수를 반환하십시오 1
ExtractValue- 값에서 키를 추출합니다 2
ExtractQuery- 쿼리에서 키를 추출합니다 3
일관성 - 값이 쿼리와 일치하는지 확인하십시오 4

전략 운영자와 달리 지원 기능 반환

33.14.4. 예

이제 우리는 아이디어를 보았으니 여기에 약속 된 것들이 있습니다.SRC/Tutorial/Complex.candsrc/튜토리얼/complex.sql소스에서complex_abs_ops. 먼저, 우리는 필요합니다토토 : 문서 : 8.2 : 사용자 정의 연산자. For an

  • 절대 값이 적은 것보다 (전략 1)
  • 절대 값은 평등하지 않은 것 (전략
  • 절대 값 평등 (전략 3)
  • 절대 값은 평등 한 것보다 더 큰 값 (전략
  • 절대 값보다 큰 절대 값 (전략

관련 세트를 정의하는 최소 오류가 발생하기 쉬운 방법

#define mag (c) ((c)- x*(c)- x + (c)- y*(c)- y)

이제 기능보다 적은 기능은

pg_function_info_v1 (complex_abs_lt);

다른 네 가지 기능은 그들이 비교하는 방식에만 다릅니다.

다음에 우리는 기능과 연산자를

함수 만들기 complex_abs_lt (복잡한, 복잡한) bool을 반환합니다filename','complex_abs_lt '

올바른 통근자를 지정하는 것이 중요합니다

주목할만한 다른 일이 여기에서 일어나고 있습니다 :

  • 하나의 연산자 만있을 수 있습니다.=및 유형 복용복잡한두 피연산자 모두. 이 경우 우리는=for복잡한그러나 우리가 건축중인 경우=일반 평등 작전이되기 위해complex_abs_eq.

  • 비록PostgreSQLcanabs_eq. 일반적으로 좋습니다

  • 우리는 함수의 SQL 이름을 만들 수있었습니다abs_eq, 의존PostgreSQL그것을 구별합니다

다음 단계는 지원 루틴 등록입니다.

함수 만들기 complex_abs_cmp (복잡하고 복잡한)filename'

33114_33222

운영자 클래스 complex_abs_ops 만들기

그리고 우리는 끝났습니다! 이제 만들고 사용할 수 있어야합니다복잡한열.

우리는 운영자 항목을 더 구두로 쓸 수있었습니다.

연산자 1 <(복잡한, 복잡한),

그러나 운영자가

위의 예는이 새로운 것을 만들고 싶다고 가정합니다.복잡한데이터 유형. 그렇지 않다면, 그냥기본값.

33.14.5. 교차 데이터 유형 연산자

지금까지 우리는 운영자 클래스가 암시 적으로 가정했습니다.

B- 트리 각 연산자의 왼쪽 피연산자가bigint(int8)) 교차 유형 비교와int4andint2. 그럴 수 있습니다

운영자 클래스 생성 int8_ops

이 정의를 주목하십시오"오버로드"운영자 전략 및 지원

GIST 인덱스는 전략 또는 지원의 과부하를 허용하지 않습니다.일관성지원

33.14.6. 시스템 의존성

PostgreSQL운영자를 사용합니다

특히와 같은 SQL 기능이 있습니다.주문 by별도의값의 비교 및 ​​정렬이 필요합니다. 구현하려면PostgreSQL기본 B- 트리를 찾습니다"Equals"이 운영자 클래스의 구성원은 정의합니다그룹 by별도의,주문 by주문.

사용자 정의 유형의 배열 비교도 의존합니다

데이터에 대한 기본 B-Tree 연산자 클래스가없는 경우

데이터 유형에 대한 기본 연산자 클래스가없는 경우"를 식별 할 수 없었습니다이 SQL 기능을 사용하려는 경우

참고 :inPostgreSQL7.4 이전 버전,=,<. 그만큼

33.14.7. 운영자의 특수 기능

운영자 클래스에는 두 가지 특별한 기능이 있습니다.

일반적으로 운영자의 구성원으로 운영자를 선언합니다.WHERE조건

선택 *에서 integer_column <4; 테이블에서

정수의 B-Tree 지수에 의해 정확히 충족 될 수 있습니다.여기서조건"Lossy"운영자의 경우Recheckto the운영자절의 조항운영자 클래스 만들기명령.Recheck토토 커뮤니티 인 경우 유효합니다

우리가 보관하는 상황을 다시 고려하십시오.Box. 이것스토리지옵션운영자 클래스 생성: 우리는

운영자 클래스 Polygon_ops를 만듭니다

현재, GIST 및 GIN 색인 메소드 만 지원 A스토리지압축andDEMOMPRESS지원 루틴은 다루어야합니다스토리지IS스토리지타입"키"값은 일반적으로 유형과 다릅니다.ExtractValueandExtractQuery지원 루틴이 책임이 있습니다