F.20. intarray — 롤 토토 배열 조작#

인타레이모듈은 null이 없는 롤 토토 배열을 조작하는 데 유용한 여러 함수와 연산자를 제공합니다. 일부 연산자를 사용한 색인 검색도 지원됩니다.

제공된 배열에 NULL 요소가 포함된 경우 이러한 모든 작업은 오류를 발생시킵니다.

이러한 작업 중 다수는 1차원 배열에만 적합합니다. 더 많은 차원의 입력 배열을 허용하더라도 데이터는 저장 순서에 따라 선형 배열인 것처럼 처리됩니다.

이 모듈은 고려됩니다.신뢰할 수 있는, 즉, 슈퍼유저가 아닌 사용자가 설치할 수 있습니다.만들기현재 데이터베이스에 대한 권한입니다.

F.20.1. 인타레이함수 및 연산자#

제공되는 기능인타레이모듈은 다음에 표시됩니다.표 F.9, 연산자표 F.10.

표 F.9. 인타레이기능

기능

설명

카운트 ( 롤 토토[] ) → 롤 토토

배열의 요소 수를 반환합니다.

icount('1,2,3'::롤 토토[])3

정렬 ( 롤 토토[], dir 텍스트 ) → 롤 토토[]

배열을 오름차순 또는 내림차순으로 정렬합니다.dir반드시오름차순또는설명.

sort('1,3,2'::integer[], 'desc'){3,2,1}

정렬 ( 롤 토토[] ) → 롤 토토[]

sort_asc ( 롤 토토[] ) → 롤 토토[]

오름차순으로 정렬합니다.

정렬(배열[11,77,44]){11,44,77}

sort_desc ( 롤 토토[] ) → 롤 토토[]

내림차순으로 정렬됩니다.

sort_desc(배열[11,77,44]){77,44,11}

유니크 ( 롤 토토[] ) → 롤 토토[]

인접한 중복 항목을 제거합니다. 종종 다음과 함께 사용됩니다.정렬모든 중복 항목을 제거합니다.

uniq('1,2,2,3,1,1'::롤 토토[]){1,2,3,1}

uniq(sort('1,2,3,2,1'::롤 토토[])){1,2,3}

idx ( 롤 토토[], 항목 롤 토토 ) → 롤 토토

일치하는 첫 번째 배열 요소의 인덱스를 반환합니다.항목또는 일치하는 항목이 없으면 0입니다.

idx(배열[11,22,33,22,11], 22)2

하위 배열 ( 롤 토토[], 시작 롤 토토, len 롤 토토 ) → 롤 토토[]

위치에서 시작하는 배열 부분 추출시작, 와len요소.

하위 배열('1,2,3,2,1'::롤 토토[], 2, 3){2,3,2}

하위 배열 ( 롤 토토[], 시작 롤 토토 ) → 롤 토토[]

위치에서 시작하는 배열 부분을 추출합니다.시작.

하위 배열('1,2,3,2,1'::롤 토토[], 2){2,3,2,1}

인세트 ( 롤 토토 ) → 롤 토토[]

단일 요소 배열을 만듭니다.

intset(42){42}


표 F.10. 인타레이운영자

운영자

설명

롤 토토[] && 롤 토토[]부울

배열이 겹치나요(적어도 하나의 공통 요소가 있습니까)?

롤 토토[] @ 롤 토토[]부울

왼쪽 배열에 오른쪽 배열이 포함되어 있습니까?

롤 토토[] <@ 롤 토토[]부울

왼쪽 배열이 오른쪽 배열에 포함되어 있습니까?

# 롤 토토[]롤 토토

배열의 요소 수를 반환합니다.

롤 토토[] # 롤 토토롤 토토

오른쪽 인수와 일치하는 첫 번째 배열 요소의 인덱스를 반환하거나 일치하지 않는 경우 0을 반환합니다. (동일함idx함수.)

롤 토토[] + 롤 토토롤 토토[]

배열 끝에 요소를 추가합니다.

롤 토토[] + 롤 토토[]롤 토토[]

배열을 연결합니다.

롤 토토[] - 롤 토토롤 토토[]

배열에서 올바른 인수와 일치하는 항목을 제거합니다.

롤 토토[] - 롤 토토[]롤 토토[]

왼쪽 배열에서 오른쪽 배열의 요소를 제거합니다.

롤 토토[] | 롤 토토롤 토토[]

인수의 합집합을 계산합니다.

롤 토토[] | 롤 토토[]롤 토토[]

인수의 합집합을 계산합니다.

롤 토토[] & 롤 토토[]롤 토토[]

인수의 교차점을 계산합니다.

롤 토토[] @@ query_int부울

배열이 쿼리를 만족합니까? (아래 참조)

query_int ~~ 롤 토토[]부울

배열이 쿼리를 만족합니까? (정류자@@)


운영자&&, @그리고<@다음과 동일함포스트그레SQL의 동일한 이름을 가진 내장 연산자. 단, null을 포함하지 않는 롤 토토 배열에서만 작동하는 반면 내장 연산자는 모든 배열 유형에 대해 작동합니다. 이러한 제한으로 인해 많은 경우 내장 연산자보다 속도가 빨라집니다.

@@그리고~~연산자는 배열이 다음을 만족하는지 테스트합니다.질의, 특화된 데이터 유형의 값으로 표현됨query_int. 갑질의배열의 요소에 대해 검사되는 롤 토토 값으로 구성되며 연산자를 사용하여 결합할 수 있음&(그리고),|(OR) 및!(아닙니다). 필요에 따라 괄호를 사용할 수 있습니다. 예를 들어 쿼리1&(2|3)1을 포함하고 2 또는 3도 포함하는 배열과 일치합니다.

F.20.2. 인덱스 지원#

인타레이에 대한 색인 지원 제공&&, @@@연산자 및 일반 배열 동일성.

두 개의 매개변수화된 GiST 인덱스 연산자 클래스가 제공됩니다:gist__int_ops(기본적으로 사용됨)은 중소 규모 데이터 세트에 적합하지만gist__intbig_ops은 더 큰 서명을 사용하며 대규모 데이터 세트(즉, 다수의 개별 배열 값을 포함하는 열)를 색인화하는 데 더 적합합니다. 구현에서는 손실 압축이 내장된 RD-트리 데이터 구조를 사용합니다.

gist__int_ops롤 토토 범위의 배열로 롤 토토 세트를 근사화합니다. 선택적 롤 토토 매개변수숫자 범위은 하나의 인덱스 키에 있는 최대 범위 수를 결정합니다. 기본값은숫자 범위은 100입니다. 유효한 값은 1에서 253 사이입니다. 더 큰 배열을 GiST 인덱스 키로 사용하면 더 큰 인덱스를 사용하는 대신 더 정확한 검색이 가능합니다(인덱스의 더 작은 부분과 더 적은 힙 페이지 스캔).

gist__intbig_ops롤 토토 세트를 비트맵 서명으로 근사화합니다. 선택적 롤 토토 매개변수시글렌서명 길이를 바이트 단위로 결정합니다. 기본 서명 길이는 16바이트입니다. 유효한 서명 길이 값은 1~2024바이트입니다. 서명이 길수록 더 큰 인덱스를 사용하는 대신 더 정확한 검색이 가능합니다(인덱스의 더 작은 부분과 더 적은 힙 페이지 검색).

기본이 아닌 GIN 연산자 클래스도 있습니다gin__int_ops, 다음 연산자도 지원합니다.<@.

GiST와 GIN 인덱싱 간의 선택은 GiST와 GIN의 상대적인 성능 특성에 따라 달라지며 이에 대해서는 다른 곳에서 논의됩니다.

F.20.3. 예시#

-- 메시지는 하나 이상에 포함될 수 있습니다.섹션CREATE TABLE 메시지(INT PRIMARY KEY 중간, INT[] 섹션, ...);

-- 서명 길이가 32바이트인 특수 인덱스를 생성합니다.
GIST를 사용하여 INDEX message_rdtree_idx ON 메시지 생성(섹션 gist__intbig_ops (siglen = 32));

-- 섹션 1 또는 2에서 메시지 선택 - OVERLAP 연산자
SELECT message.mid FROM 메시지 WHERE message.sections && '1,2';

-- 섹션 1과 2에서 메시지를 선택하세요. - CONTAINS 연산자
SELECT message.mid FROM 메시지 WHERE message.sections @ '1,2';

-- QUERY 연산자를 사용하여 동일
SELECT message.mid FROM 메시지 WHERE message.sections @@ '1&2'::query_int;

F.20.4. 벤치마크#

소스 디렉터리contrib/intarray/bench설치된 제품에 대해 실행할 수 있는 벤치마크 테스트 모음이 포함되어 있습니다.PostgreSQL서버. (또한 필요합니다.DBD::Pg설치됩니다.) 실행하려면:

cd .../contrib/intarray/벤치
생성된 테스트
psql -c "확장 인타레이 생성" 테스트
./create_test.pl | psql 테스트
./bench.pl

bench.pl스크립트에는 인수 없이 실행될 때 표시되는 다양한 옵션이 있습니다.

F.20.5. 저자#

모든 작업은 Teodor Sigaev에 의해 수행되었습니다. () 및 Oleg Bartunov(). 참조http://www.sai.msu.su/~megera/postgres/gist/추가 정보를 확인하세요. Andrey Oktyabrski는 새로운 기능과 작업을 추가하는 데 훌륭한 작업을 수행했습니다.

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.