이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : F.37. 스포츠 토토 사이트 - 라인 세그먼트 또는 부동 소수점 간격에 대한 데이터 유형버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

F.34. 사설 토토

이 모듈은 데이터 유형을 구현합니다.세그선 세그먼트 또는 부동 소수점 간격을 나타냅니다.세그간격 끝점의 불확실성을 나타낼 수 있으므로 실험실 측정을 나타내는 데 특히 유용합니다.

F.34.1. 근거

측정의 기하학은 일반적으로 숫자 연속체의 한 점의 기하학보다 더 복잡합니다. 측정은 일반적으로 한계가 다소 모호한 연속체의 한 부분입니다. 불확실성과 무작위성 때문에 측정값이 간격으로 나오는 것은 물론, 측정되는 값이 자연적으로 단백질의 안정성 온도 범위와 같은 일부 조건을 나타내는 간격일 수 있기 때문입니다.

상식을 사용하면 숫자 쌍보다는 간격으로 데이터를 저장하는 것이 더 편리해 보입니다. 실제로는 대부분의 애플리케이션에서 더 효율적인 것으로 나타났습니다.

상식에 따라, 한계의 모호함은 전통적인 숫자 데이터 유형의 사용이 특정 정보의 손실로 이어진다는 것을 암시합니다. 이것을 고려하십시오: 귀하의 기기는 6.50을 읽고 이 판독값을 데이터베이스에 입력합니다. 가져오면 무엇을 얻나요? 시청:

test= "pH"로 6.50 :: float8을 선택합니다.
 pH
---
6.5
(1행)

측정의 세계에서 6.50은 6.5와 다릅니다. 때로는 결정적으로 다를 수도 있습니다. 실험자는 일반적으로 자신이 신뢰하는 숫자를 기록(및 게시)합니다. 6.50은 실제로 더 크고 더 퍼지 간격인 6.5 내에 포함된 퍼지 간격이며, 중심점은 (아마도) 공유하는 유일한 공통 특징입니다. 우리는 이렇게 서로 다른 데이터 항목이 동일하게 나타나는 것을 원하지 않습니다.

결론? 임의의 가변 정밀도로 간격의 한계를 기록할 수 있는 특별한 데이터 유형을 갖는 것이 좋습니다. 각 데이터 요소가 자체 정밀도를 기록한다는 점에서 변수입니다.

이것을 확인하세요:

test= '6.25 .. 6.50'::사설 토토를 "pH"로 선택합니다.
          pH
------------
6.25 .. 6.50
(1행)

F.34.2. 구문

간격의 외부 표현은 범위 연산자(로 결합된 하나 또는 두 개의 부동 소수점 숫자를 사용하여 구성됩니다...또는...). 또는 중심점에 편차를 더하거나 뺀 값으로 지정할 수도 있습니다. 선택적 확실성 표시기(<, 또는~)도 저장할 수 있습니다. (그러나 모든 내장 연산자는 확실성 표시기를 무시합니다.)표 F-27허용된 표현에 대한 개요를 제공합니다.표 F-28몇 가지 예를 보여줍니다.

표 F-27, x, y델타부동소수점 숫자를 나타냅니다.x그리고y하지만 아님델타, 확실성 표시가 앞에 올 수 있습니다.

표 F-27.세그외부 표현

x 단일 값(길이가 0인 간격)
x .. y 간격:xy
x (+-) 델타 간격:x - 델타x + 델타
x .. 하한이 있는 열린 간격x
.. x 상한이 있는 열린 간격x

표 F-28. 유효한 예세그입력

5.0 길이가 0인 세그먼트(원할 경우 점)를 생성합니다.
~5.0 길이가 0인 세그먼트 및 레코드를 생성합니다.~데이터에.~다음에 의해 무시됨세그작업이지만 주석으로 보존됩니다.
<5.0 5.0에 점을 생성합니다.<무시되지만 댓글로 보존됩니다.
5.0 5.0에 점을 생성합니다.무시되지만 댓글로 보존됩니다.
5(+-)0.3 간격 생성4.7 .. 5.3. 참고하세요(+-)기호가 보존되지 않습니다.
50 .. 50보다 크거나 같은 모든 것
.. 0 0보다 작거나 같은 모든 것
1.5e-2 .. 2E-2 간격 생성0.015 .. 0.02
1 ... 2 다음과 동일1...2또는1 .. 2또는1..2(범위 연산자 주위의 공백은 무시됩니다)

왜냐하면...연산자는 데이터 소스에서 널리 사용되며, 의 대체 철자로 허용됩니다...연산자. 불행히도 이로 인해 구문 분석이 모호해집니다.0...23이것은 다음과 같습니다23또는0.23. 이 문제는의 모든 숫자에서 소수점 앞에 최소한 한 자리를 요구함으로써 해결됩니다.세그입력합니다.

건강 점검으로,세그예를 들어 하한이 상한보다 큰 간격을 거부합니다.5 .. 2.

F.34.3. 정밀도

세그값은 32비트 부동 소수점 숫자 쌍으로 내부적으로 저장됩니다. 즉, 유효 숫자가 7개보다 많으면 잘립니다.

유효 숫자가 7개 이하인 숫자는 원래 정밀도를 유지합니다. 즉, 쿼리가 0.00을 반환하는 경우 뒤에 오는 0은 형식 지정으로 인한 인공물이 아니며 원본 데이터의 정밀도를 반영한다는 것을 확신할 수 있습니다. 앞에 오는 0의 개수는 정밀도에 영향을 주지 않습니다. 값 0.0067은 유효 숫자가 2자리인 것으로 간주됩니다.

F.34.4. 사용법

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

표 F-29. 세그먼트 GiST 운영자

운영자 설명
[a, b] << [c, d] [a, b]는 [c, d]의 왼쪽에 완전히 있습니다. 즉, [a, b] << [c, d]는 b < c이면 참이고 그렇지 않으면 거짓입니다.
[a, b] [c, d] [a, b]는 [c, d]의 오른쪽에 완전히 있습니다. 즉, [a, b] [c, d]는 a d이면 참이고 그렇지 않으면 거짓입니다.
[a, b] &< [c, d] 겹치거나 남음 — 다음과 같이 읽는 것이 더 나을 수 있습니다."오른쪽으로 확장되지 않음". b <= d일 때 참입니다.
[a, b] & [c, d] 겹침 또는 오른쪽 — 이것은 다음과 같이 읽는 것이 더 나을 수 있습니다."왼쪽으로 확장되지 않음". a = c일 때 참입니다.
[a, b] = [c, d] 다음과 동일 — 세그먼트 [a, b] 및 [c, d]가 동일합니다. 즉, a = c 및 b = d입니다.
[a, b] && [c, d] 세그먼트 [a, b]와 [c, d]가 겹칩니다.
[a, b] @ [c, d] 세그먼트 [a, b]는 세그먼트 [c, d], 즉 a <= c 및 b = d를 포함합니다.
[a, b] <@ [c, d] 세그먼트 [a, b]는 [c, d]에 포함되어 있습니다. 즉, a = c 및 b <= d입니다.

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

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

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

F.34.5. 참고

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

변환 메커니즘(+-)일반 범위에 대한 것은 경계의 유효 자릿수를 결정하는 데 완전히 정확하지 않습니다. 예를 들어, 결과 간격에 10의 거듭제곱이 포함된 경우 하위 경계에 추가 숫자를 추가합니다.

postgres= 세그먼트로 '10(+-)1'::seg를 선택합니다.
      세그먼트
---------
9.0 .. 11 -- 다음과 같아야 합니다: 9 .. 11

R-트리 인덱스의 성능은 입력 값의 초기 순서에 따라 크게 달라질 수 있습니다. 입력 테이블을 정렬하는 것이 매우 도움이 될 수 있습니다.세그열; 스크립트 보기sort-사설 토토ments.pl예를 들어.

F.34.6. 크레딧

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

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