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

31.14. 인터페이스

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

참고 :이전PostgreSQL릴리스 7.3, 필요했습니다pg_amop, pg_amprocpg_opclass생성하기 위해운영자 생성, 이것은 훨씬 간단하고 오류가 발생하기 쉬운 방법입니다.

31.14.1.

PG_AM테이블에는 하나가 포함되어 있습니다PostgreSQL이지만 모든 색인 메소드는입니다PG_AM. 그것은PG_AM- 그러나 그것은 범위를 훨씬 뛰어 넘습니다

토토 방법의 루틴은 직접 알지 못합니다.연산자여기서-an과 함께 사용할 수있는 사고 연산자지원 절차여기서-Clause 연산자와 함께 사용할 수 있습니다

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

31.14.2. 색인 메소드 전략

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

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

표 31-2. B- 트리 전략

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

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

표 31-3. 해시 전략

작동 전략 번호
Equal 1

R-Tree Indexes Express 직사각형 함유 관계.표 31-4.

표 31-4. R- 트리 전략

작동 전략 번호
왼쪽 1
왼쪽 또는 중첩 2
중첩 3
오른쪽 또는 중첩 4
오른쪽 5
동일 6
포함 7
포함 8

GIST 토토는 훨씬 더 유연합니다."일관성"각 특정의 지원 루틴

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

그건 그렇고,Amorderstrategy열인PG_AMAmorderstrategyisAmorderstrategy= 1,""보다 작습니다.전략 번호.

31.14.3. 색인 방법 지원

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

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

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

표 31-5. B- 트리 지원 기능

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

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

표 31-6. 해시 지원 기능

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

R- 트리 인덱스에는 3 개의 지원 함수가 필요합니다.테이블.

표 31-7. R- 트리 지원 기능

기능 지원 번호
Union 1
교차로 2
size 3

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

표 31-8. GIST 지원 기능

기능 지원 번호
일관성 1
Union 2
압축 3
Decompress 4
페널티 5
picksplit 6
Equal 7

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

31.14.4. 예

이제 우리는 아이디어를 보았으니 여기에 약속 된 것들이 있습니다.SRC/Tutorial/Complex.candsrc/튜토리얼/complex.sql소스에서complex_abs_ops. 먼저, 우리는 필요합니다사설 토토 : 문서 : 8.0 : 사용자 정의 연산자. 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. 일반적으로 좋은 관행입니다

  • 우리는를 만들 수있었습니다PostgreSQL함수 이름abs_eq, 의존PostgreSQL그것을 구별합니다PostgreSQL같은 이름의 함수.PostgreSQL레벨.

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

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

이제 필요한 연산자와 지원 루틴을 보유하고 있습니다.

생성 연산자 클래스 complex_abs_ops를 만듭니다

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

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

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

그러나 운영자가

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

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

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

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

32489_33222

이 정의를 알아라"오버로드"운영자 전략 및 지원

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

31.14.6. 시스템 의존성

PostgreSQL운영자를 사용합니다

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

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

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

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

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

31.14.7. 운영자의 특수 기능

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

일반적으로 운영자의 구성원으로 연산자를 선언합니다.여기서조건

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

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

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

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

현재, Gist Index 메소드 만 지원합니다.스토리지열과 다른 유형압축andDecompress지원 루틴은 처리해야합니다스토리지사용됩니다.