지금까지 설명한 절차를 통해 새로운 유형을 정의 할 수 있습니다.운영자 클래스새
참고 :이전PostgreSQL릴리스 7.3, 필요했습니다
pg_amop
,pg_amproc
및pg_opclass
생성하기 위해운영자 생성, 이것은 훨씬 간단하고 오류가 발생하기 쉬운 방법입니다.
PG_AM
테이블에는 하나가 포함되어 있습니다PostgreSQL이지만 모든 색인 메소드는입니다PG_AM
. 그것은PG_AM
- 그러나 그것은 범위를 훨씬 뛰어 넘습니다
토토 방법의 루틴은 직접 알지 못합니다.연산자여기서-an과 함께 사용할 수있는 사고 연산자지원 절차여기서-Clause 연산자와 함께 사용할 수 있습니다
동일한 연산자 클래스 이름을 여러 곳에서 사용할 수 있습니다.int4_ops), 그러나 그러한 클래스는 독립적입니다
운영자 클래스와 관련된 연산자는 다음과 같습니다"전략 번호",""보다 작습니다.and""보다 크거나 동일합니다.흥미 롭습니다PostgreSQL사용자가 정의 할 수 있습니다PostgreSQL할 수 없습니다<또는> =)"전략"
B- 트리 색인 메소드는 5 가지 전략을 정의합니다.테이블.
해시 토토는 비트 동등성 만 표현하므로 사용합니다.표 31-3.
R-Tree Indexes Express 직사각형 함유 관계.표 31-4.
GIST 토토는 훨씬 더 유연합니다."일관성"각 특정의 지원 루틴
모든 전략 운영자는 부울 값을 반환합니다. ~ 안에부울여기서토토와 함께 사용할 조항.
그건 그렇고,Amorderstrategy열인PG_AM
AmorderstrategyisAmorderstrategy= 1,""보다 작습니다.전략 번호.
전략은 일반적으로 시스템에 대한 정보가 충분하지 않습니다
전략과 마찬가지로 운영자 클래스는 어떤 식별합니다"지원 기능 번호".
B- 트리는 단일 지원 함수가 필요합니다.표 31-5.
해시 인덱스 마찬가지로 하나의 지원 함수가 필요합니다.테이블.
R- 트리 인덱스에는 3 개의 지원 함수가 필요합니다.테이블.
GIST 인덱스에는 7 개의 지원 기능이 필요합니다.테이블.
전략 운영자와 달리 지원 기능 반환
이제 우리는 아이디어를 보았으니 여기에 약속 된 것들이 있습니다.SRC/Tutorial/Complex.candsrc/튜토리얼/complex.sql소스에서complex_abs_ops. 먼저, 우리는 필요합니다사설 토토 : 문서 : 8.0 : 사용자 정의 연산자. For an
관련 세트를 정의하는 최소 오류가 발생하기 쉬운 방법
#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 <(복잡한, 복잡한),
그러나 운영자가
위의 예는이 새로 만들고 싶다고 가정합니다.복잡한데이터 유형. 그렇지 않다면, 그냥기본값.
지금까지 우리는 운영자 클래스가 암시 적으로 가정했습니다.
B- 트리는 각 연산자의 왼쪽 피연산자가bigint (int8)) 교차 유형 비교와int4andint2. 그럴 수 있습니다
32489_33222
이 정의를 알아라"오버로드"운영자 전략 및 지원
GIST 인덱스는 전략 또는 지원의 과부하를 허용하지 않습니다.일관성지원
PostgreSQL운영자를 사용합니다
특히와 같은 SQL 기능이 있습니다.주문 byand별도의값의 비교 및 분류가 필요합니다. 구현하려면PostgreSQL기본 B- 트리를 찾습니다"Equals"이 운영자 클래스의 구성원은 정의합니다그룹 byand별도의,주문 by주문.
사용자 정의 유형의 배열 비교도 의존합니다
데이터에 대한 기본 B- 트리 연산자 클래스가없는 경우
데이터 유형에 대한 기본 연산자 클래스가 없으면"를 식별 할 수 없었습니다이 SQL 기능을 사용하려는 경우
참고 :inPostgreSQL7.4 이전 버전,=, <및. 그만큼
운영자 클래스에는 두 가지 특별한 기능이 있습니다.
일반적으로 운영자의 구성원으로 연산자를 선언합니다.여기서조건
선택 *에서 integer_column <4; 테이블에서
정수의 B-Tree 지수에 의해 정확히 충족 될 수 있습니다.여기서조건"Lossy"운영자의 경우다시 확인to the운영자절의 조항운영자 클래스 만들기명령.다시 확인토토 인 경우 유효합니다
우리가 보관하는 상황을 다시 고려하십시오.Box. 이것스토리지옵션운영자 클래스 만들기: 우리는
운영자 클래스 Polygon_ops를 만듭니다
현재, Gist Index 메소드 만 지원합니다.스토리지열과 다른 유형압축andDecompress지원 루틴은 처리해야합니다스토리지사용됩니다.