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

F.9. 토토 핫

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

F.9.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.9.2. 정밀도

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

F.9.3. 사용법

표 F-4유형에 제공된 연산자를 표시토토 핫.

표 F-4. 토토 핫 연산자

운영자 결과 설명
a = b 부울 토토 핫 a와 b는 동일합니다.
a && b 부울 토토 핫 a와 b가 겹칩니다.
a @ b 부울 토토 핫 a는 토토 핫 b를 포함합니다.
a <@ b 부울 토토 핫 a는 토토 핫 b에 포함되어 있습니다.
a < b 부울 입방체 a는 입방체 b보다 작습니다.
a <= b 부울 입방체 a는 입방체 b보다 작거나 같습니다.
a b 부울 입방체 a는 입방체 b보다 큽니다.
a = b 부울 토토 핫 a는 토토 핫 b보다 크거나 같습니다.
a < b 부울 토토 핫 a는 토토 핫 b와 같지 않습니다.
a - n float8 가져오기n-번째 토토 핫 좌표(1부터 계산).
a ~ n float8 가져오기n-다음 방식으로 토토 핫의 번째 좌표: n = 2 * k - 1은 하한을 의미함k-번째 차원, n = 2 * k는 상한을 의미함k-번째 차원. 이 연산자는 KNN-GiST 지원을 위해 설계되었습니다.
a <- b float8 a와 b 사이의 유클리드 거리.
a <# b float8 a와 b 사이의 택시(L-1 미터법) 거리.
a <= b float8 a와 b 사이의 체비쇼프(L-inf 미터법) 거리.

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

스칼라 순서 연산자(<, =등)은 정렬 외에는 실용적인 목적으로는 별로 의미가 없습니다. 이 연산자는 먼저 첫 번째 좌표를 비교하고, 같으면 두 번째 좌표를 비교합니다. 주로 b-tree 인덱스 연산자 클래스를 지원하기 위해 존재합니다.토토 핫, 예를 들어 UNIQUE 제약 조건을 원하는 경우에 유용할 수 있습니다.토토 핫열.

토토 핫모듈은 다음을 위한 GiST 인덱스 연산자 클래스도 제공합니다.토토 핫값. 갑토토 핫GiST 색인은 다음을 사용하여 값을 검색하는 데 사용할 수 있습니다.=, &&, @<@연산자어디절.

또한, a토토 핫GiST 인덱스는 메트릭 연산자를 사용하여 가장 가까운 이웃을 찾는 데 사용할 수 있습니다.<-, <#<=in주문 기준절. 예를 들어, 3차원 점(0.5, 0.5, 0.5)의 가장 가까운 이웃은 다음을 사용하여 효율적으로 찾을 수 있습니다.

테스트에서 c 선택 ORDER BY c <- 토토 핫(배열[0.5,0.5,0.5]) LIMIT 1;

~연산자를 이 방식으로 사용하면 선택한 좌표로 정렬된 처음 몇 개의 값을 효율적으로 검색할 수도 있습니다. 예를 들어, 첫 번째 좌표(왼쪽 아래 모서리)를 기준으로 오름차순으로 정렬된 처음 몇 개의 토토 핫를 얻으려면 다음 쿼리를 사용할 수 있습니다.

테스트에서 c 선택 ORDER BY c ~ 1 LIMIT 5;

그리고 오른쪽 상단 모서리의 첫 번째 좌표가 내림차순으로 정렬된 2D 토토 핫를 얻으려면:

테스트에서 c 선택 ORDER BY c ~ 3 DESC LIMIT 5;

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

표 F-5. 토토 핫 함수

기능 결과 설명
토토 핫(float8) 토토 핫 두 좌표가 동일한 1차원 토토 핫를 만듭니다. 토토 핫(1) == '(1)'
토토 핫(float8, float8) 토토 핫 1차원 토토 핫를 만듭니다. 토토 핫(1,2) == '(1),(2)'
토토 핫(float8[]) 토토 핫 배열에 의해 정의된 좌표를 사용하여 부피가 0인 토토 핫를 만듭니다. 토토 핫(ARRAY[1,2]) == '(1,2)'
토토 핫(float8[], float8[]) 토토 핫 두 배열에 의해 정의된 오른쪽 상단과 왼쪽 하단 좌표를 갖는 토토 핫를 만듭니다. 이 토토 핫는 길이가 같아야 합니다. 토토 핫(ARRAY[1,2], ARRAY[3,4]) == '(1,2),(3,4)'
토토 핫(토토 핫, float8) 토토 핫 새 좌표의 두 끝점에 대해 동일한 값을 사용하여 기존 토토 핫에 차원을 추가하여 새 토토 핫를 만듭니다. 이는 계산된 값을 바탕으로 토토 핫를 하나씩 만드는 데 유용합니다. 토토 핫('(1,2),(3,4)'::토토 핫, 5) == '(1,2,5),(3,4,5)'
토토 핫(토토 핫, float8, float8) 토토 핫 기존 토토 핫에 차원을 추가하여 새 토토 핫를 만듭니다. 이는 계산된 값을 바탕으로 토토 핫를 하나씩 만드는 데 유용합니다. 토토 핫('(1,2),(3,4)'::토토 핫, 5, 6) == '(1,2,5),(3,4,6)'
cube_dim(토토 핫) 정수 토토 핫의 차원 수를 반환합니다. cube_dim('(1,2),(3,4)') == '2'
cube_ll_coord(토토 핫, 정수) float8 반환n-토토 핫의 왼쪽 하단 모서리에 대한 번째 좌표 값입니다. cube_ll_coord('(1,2),(3,4)', 2) == '2'
cube_ur_coord(토토 핫, 정수) float8 다음을 반환합니다.n-토토 핫의 오른쪽 상단 모서리에 대한 번째 좌표 값입니다. cube_ur_coord('(1,2),(3,4)', 2) == '4'
cube_is_point(토토 핫) 부울 토토 핫가 점인 경우, 즉 정의하는 두 모서리가 동일한 경우 참을 반환합니다.
cube_distance(토토 핫, 토토 핫) float8 두 토토 핫 사이의 거리를 반환합니다. 두 토토 핫가 모두 점인 경우 이는 일반적인 거리 함수입니다.
토토 핫_하위 집합(토토 핫, 정수[]) 토토 핫 배열의 차원 인덱스 목록을 사용하여 기존 토토 핫에서 새 토토 핫를 만듭니다. 단일 차원의 끝점을 추출하거나 차원을 삭제하거나 원하는 대로 재정렬하는 데 사용할 수 있습니다. 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 더블, n 정수) 토토 핫 지정된 반경만큼 토토 핫의 크기를 증가시킵니다.r적어도n차원. 반지름이 음수이면 토토 핫가 대신 축소됩니다. 정의된 모든 치수는 반경에 따라 변경됩니다.r. 왼쪽 하단 좌표가 감소합니다.r그리고 오른쪽 상단 좌표는 다음만큼 증가합니다.r. 왼쪽 아래 좌표가 해당 오른쪽 위 좌표보다 크게 증가하는 경우(이는 다음 경우에만 발생할 수 있습니다.r< 0) 두 좌표 모두 평균으로 설정됩니다. 만일n은(는) 정의된 차원 수보다 크고 토토 핫가 확대되고 있습니다(r 0), 그런 다음 추가 차원이 추가되어 만들어집니다.n모두; 추가 좌표의 초기값은 0을 사용합니다. 이 기능은 가까운 지점을 검색하기 위해 지점 주위에 경계 상자를 만드는 데 유용합니다. cube_enlarge('(1,2),(3,4)', 0.5, 3) == '(0.5,1.5,-0.5),(3.5,4.5,0.5)'

F.9.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.9.5. 참고

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

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

F.9.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 호출 프로토콜을 사용하도록 코드를 정리합니다.