이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : F.10. 메이저 토토 사이트-다차원 메이저 토토 사이트 데이터 유형버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

F.8. 사설 토토

이 모듈은 데이터 유형을 구현합니다.사설 토토다차원 사설 토토를 표현하기 위한 것입니다.

F.8.1. 구문

표 F-3에 대한 유효한 외부 표현을 보여줍니다.사설 토토유형.x, y등은 부동 소수점 숫자를 나타냅니다.

표 F-3. 사설 토토 외부 표현

x 1차원 점(또는 길이가 0인 1차원 간격)
(x) 위와 동일
x1,x2,...,xn n차원 공간의 점, 내부적으로 부피가 0인 사설 토토로 표현됨
(x1,x2,...,xn) 위와 동일
(x),(y) 다음에서 시작하는 1차원 간격x그리고 종료 시간:y또는 그 반대로; 순서는 중요하지 않습니다.
[(x),(y)] 위와 동일
(x1,...,xn),(y1,...,yn) 대각선으로 반대쪽 모서리 쌍으로 표현되는 n차원 사설 토토
[(x1,...,xn),(y1,...,yn)] 위와 동일

사설 토토의 반대쪽 모서리가 어떤 순서로 입력되는지는 중요하지 않습니다.사설 토토유니폼을 생성하는 데 필요한 경우 함수가 자동으로 값을 교환합니다."왼쪽 하단 — 오른쪽 상단"내부 표현.

공백은 무시되므로[(x),(y)]다음과 같습니다[ ( x ), ( y ) ].

F.8.2. 정밀도

값은 내부적으로 64비트 부동 소수점 숫자로 저장됩니다. 즉, 유효 숫자가 약 16자리를 초과하면 잘립니다.

F.8.3. 사용법

사설 토토모듈에는 다음에 대한 GiST 인덱스 연산자 클래스가 포함되어 있습니다.사설 토토값. GiST 연산자 클래스에서 지원하는 연산자는 다음과 같습니다.표 F-4.

표 F-4. Cube GiST 운영자

운영자 설명
a = b 사설 토토 a와 b는 동일합니다.
a && b 사설 토토 a와 b가 겹칩니다.
a @ b 사설 토토 a는 사설 토토 b를 포함합니다.
a <@ b 사설 토토 a는 사설 토토 b에 포함되어 있습니다.

(PostgreSQL 8.2 이전에는 격리 연산자@그리고<@각각 호출되었습니다@그리고~. 이러한 이름은 계속 사용할 수 있지만 더 이상 사용되지 않으며 결국 사용 중지됩니다. 이전 이름은 이전에 핵심 기하학적 데이터 유형이 뒤따랐던 규칙과 반대입니다!)

표준 B-트리 연산자도 제공됩니다. 예를 들면

운영자 설명
[a, b] < [c, d] 미만
[a, b] [c, d] 보다 큼
이 연산자는 정렬 외에는 실용적인 목적으로는 별로 의미가 없습니다. 이들 연산자는 먼저 (a)를 (c)와 비교하고, 둘이 같으면 (b)를 (d)와 비교합니다. 그러면 대부분의 경우 합리적으로 좋은 정렬이 이루어지며, 이는 이 유형에 ORDER BY를 사용하려는 경우 유용합니다.

표 F-5사용 가능한 기능을 보여줍니다.

표 F-5. 사설 토토 함수

사설 토토(float8)는 사설 토토를 반환합니다. 두 좌표가 동일한 1차원 사설 토토를 만듭니다.사설 토토(1) == '(1)'
사설 토토(float8, float8)는 사설 토토를 반환합니다. 1차원 사설 토토를 만듭니다.사설 토토(1,2) == '(1),(2)'
사설 토토(float8[])는 사설 토토를 반환합니다. 배열에 의해 정의된 좌표를 사용하여 부피가 0인 사설 토토를 만듭니다.사설 토토(ARRAY[1,2]) == '(1,2)'
사설 토토(float8[], float8[])는 사설 토토를 반환합니다. 두 배열에 의해 정의된 오른쪽 상단과 왼쪽 하단 좌표가 있는 사설 토토를 만듭니다. 이 사설 토토는 길이가 같아야 합니다.사설 토토('1,2'::float[], '3,4'::float[]) == '(1,2),(3,4)'
사설 토토(사설 토토, float8)는 사설 토토를 반환합니다. 새 좌표의 두 부분에 대해 동일한 값을 가진 기존 사설 토토에 차원을 추가하여 새 사설 토토를 만듭니다. 이는 계산된 값을 바탕으로 사설 토토를 하나씩 만드는 데 유용합니다.사설 토토('(1)',2) == '(1,2),(1,2)'
사설 토토(사설 토토, float8, float8)는 사설 토토를 반환합니다. 기존 사설 토토에 차원을 추가하여 새 사설 토토를 만듭니다. 이는 계산된 값을 바탕으로 사설 토토를 하나씩 만드는 데 유용합니다.사설 토토('(1,2)',3,4) == '(1,3),(2,4)'
cube_dim(cube)은 int를 반환합니다. 사설 토토의 차원 수를 반환합니다.
cube_ll_coord(cube, int)는 double을 반환합니다. 사설 토토의 왼쪽 하단 모서리에 대한 n번째 좌표 값을 반환합니다.
cube_ur_coord(cube, int)는 double을 반환합니다. 사설 토토의 오른쪽 상단 모서리에 대한 n번째 좌표 값을 반환합니다.
cube_is_point(cube)는 bool을 반환합니다. 사설 토토가 점인 경우, 즉 정의하는 두 모서리가 동일한 경우 참을 반환합니다.
cube_distance(사설 토토, 사설 토토)는 double을 반환합니다. 두 사설 토토 사이의 거리를 반환합니다. 두 사설 토토가 모두 점인 경우 이는 일반적인 거리 함수입니다.
cube_subset(cube, int[])는 사설 토토를 반환합니다. 배열의 차원 인덱스 목록을 사용하여 기존 사설 토토에서 새 사설 토토를 만듭니다. 단일 차원의 LL 및 UR 좌표를 모두 찾는 데 사용할 수 있습니다(예:cube_subset(사설 토토('(1,3,5),(6,7,8)'), ARRAY[2]) = '(3),(7)'. 또는 차원을 삭제하거나 원하는 대로 순서를 변경하는 데 사용할 수 있습니다. 예:cube_subset(사설 토토('(1,3,5),(6,7,8)'), ARRAY[3,2,1,1]) = '(5, 3, 1, 1),(8, 7, 6, 6)'.
cube_union(사설 토토, 사설 토토)은 사설 토토를 반환합니다. 두 사설 토토의 합집합을 생성
cube_inter(사설 토토, 사설 토토)는 사설 토토를 반환합니다. 두 사설 토토의 교차점을 생성
cube_enlarge(사설 토토 c, 더블 r, int n)는 사설 토토를 반환합니다. 최소 n 차원에서 지정된 반경만큼 사설 토토의 크기를 늘립니다. 반지름이 음수이면 사설 토토가 대신 축소됩니다. 이는 가까운 지점을 검색하기 위해 지점 주위에 경계 상자를 만드는 데 유용합니다. 정의된 모든 치수는 반경 r만큼 변경됩니다. LL 좌표는 r만큼 감소하고 UR 좌표는 r만큼 증가합니다. LL 좌표가 해당 UR 좌표보다 크게 증가하면(이는 r < 0인 경우에만 발생할 수 있음) 두 좌표가 모두 평균으로 설정됩니다. n이 정의된 차원 수보다 크고 사설 토토가 증가하는 경우(r = 0) 0이 추가 좌표의 기준으로 사용됩니다.

F.8.4. 기본값

나는 이 결합을 믿습니다:

select Cube_union('(0,5,2),(2,3,1)', '0');
사설 토토_유니온
------
(0, 0, 0),(2, 5, 2)
(1행)

상식과 모순되지 않으며 교차점도 마찬가지입니다.

select Cube_inter('(0,-1),(1,1)', '(-2),(2)');
사설 토토_인터
-------------
(0, 0),(1, 0)
(1행)

다른 차원의 사설 토토에 대한 모든 이진 연산에서 나는 낮은 차원의 사설 토토가 데카르트 투영이라고 가정합니다. 즉, 즉, 문자열 표현에서 생략된 좌표 자리에 0이 있습니다. 위의 예는 다음과 같습니다.

cube_union('(0,5,2),(2,3,1)','(0,0,0),(0,0,0)');
Cube_inter('(0,-1),(1,1)','(-2,0),(2,0)');

다음 포함 조건자는 점 구문을 사용하지만 실제로 두 번째 인수는 내부적으로 상자로 표시됩니다. 이 구문을 사용하면 (box,point) 조건자에 대해 별도의 포인트 유형과 함수를 정의할 필요가 없습니다.

select Cube_contains('(0,0),(1,1)', '0.5,0.5');
사설 토토_포함
--------------
티
(1행)

F.8.5. 참고

사용 예는 회귀 테스트를 참조하세요.sql/cube.sql.

사람들이 물건을 깨기 어렵게 만들기 위해 사설 토토의 차원 수는 100으로 제한되어 있습니다. 이것은에서 설정됩니다.cubedata.h더 큰 것이 필요하다면.

F.8.6. 크레딧

원저자: Gene Selkov, Jr., 아르곤 국립 연구소 수학과 컴퓨터 공학부.

저는 주로 Joe Hellerstein 교수에게 감사드립니다. (https://dsf.berkeley.edu/jmh/) GiST의 요점을 설명하기 위해 (http://gist.cs.berkeley.edu/), Illustra에 예시를 제공한 그의 전 학생인 Andy Dong에게도 감사드립니다. 또한 나만의 세계를 만들고 그 안에서 방해받지 않고 살아갈 수 있도록 도와준 현재와 과거의 모든 Postgres 개발자들에게도 감사드립니다. 그리고 수년 동안 내 데이터베이스 연구를 충실하게 지원해 준 Argonne Lab과 미국 에너지부에 감사의 말씀을 전하고 싶습니다.

이 패키지에 대한 사소한 업데이트는 Bruno Wolff III에 의해 이루어졌습니다.2002년 8월/9월. 여기에는 정밀도를 단정밀도에서 배정밀도로 변경하고 몇 가지 새로운 기능을 추가하는 것이 포함됩니다.

Joshua Reich가 추가 업데이트를 수행했습니다.2006년 7월. 여기에는 다음이 포함됩니다.사설 토토(float8[], float8[])그리고 더 이상 사용되지 않는 V0 프로토콜 대신 V1 호출 프로토콜을 사용하도록 코드를 정리합니다.