8.17. 롤 토토 유형#

롤 토토 유형은 일부 요소 유형의 값 롤 토토를 나타내는 데이터 유형입니다 (롤 토토라고 함)하위 유형). 예를 들어, 롤 토토타임 스탬프회의실이 예약되어있는 시간의 롤 토토를 나타내는 데 사용될 수 있습니다. 이 경우 데이터 유형은입니다.tsrange(짧은타임 스탬프 범위) 및타임 스탬프하위 유형입니다. 하위 유형은 요소 값이 값 범위 내에 있는지 또는 그 후에 요소 값이 잘 정의되도록 총 순서를 가져야합니다.

롤 토토 유형은 단일 롤 토토 값의 많은 요소 값을 나타내고 겹치는 롤 토토와 같은 개념을 명확하게 표현할 수 있기 때문에 유용합니다. 예약 목적으로 시간과 날짜 롤 토토를 사용하는 것이 가장 분명한 예입니다.

모든 롤 토토 유형에는 해당 멀티 랜지 유형이 있습니다. 멀티 랜지는 논쟁의 여지가없고 비어 있지 않은 비 널 롤 토토의 주문 목록입니다.

8.17.1. 내장 롤 토토 및 다중 방송 유형#

PostgreSQL은 다음과 같은 내장 롤 토토 유형과 함께 제공됩니다.

  • int4Range- 롤 토토Integer, int4multirange- 해당 멀티 랜지

  • int8Range- 롤 토토bigint, int8multirange- 해당 멀티 랜지

  • NumRange- 롤 토토숫자, Nummultirange- 해당 멀티 랜지

  • tsrange- 롤 토토시간대가없는 타임 스탬프, tsmultirange- 해당 멀티 랜지

  • TSTZRANGE- 롤 토토시간대가있는 타임 스탬프, tstzmultirange- 해당 멀티 랜지

  • Daterange- 롤 토토날짜, datemultirange- 해당 멀티 랜지

또한 자신의 롤 토토 유형을 정의 할 수 있습니다. 보다유형 만들기자세한 내용은

8.17.2. 예#

테이블 예약 생성 (TsRange 중 룸 int);

참조표 9.56표 9.58롤 토토 유형의 연산자 및 기능의 전체 목록.

8.17.3. 포용적이고 독점적 인 경계#

모든 비어 있지 않은 롤 토토에는 하한과 상한의 두 롤 토토가 있습니다. 이 값 사이의 모든 지점은 롤 토토에 포함됩니다.

롤 토토의 텍스트 형식에서 포괄적 인 하한은[독점적 인 하한은를 표현하는 반면(. 마찬가지로 포괄적 인 상한은로 표시됩니다.], 독점적 인 상한은에 표시됩니다.). (보다섹션 8.17.5자세한 내용은)

함수lower_inc어퍼_inc롤 토토 값의 하부 및 상한의 포괄 성을 테스트합니다.

8.17.4. 무한 (무한) 롤 토토#

롤 토토의 하한을 생략 할 수 있습니다. 즉, 상한보다 적은 값이 롤 토토에 포함되어 있음을 의미합니다.(, 3]. 마찬가지로, 롤 토토의 상한이 생략되면 하한보다 큰 모든 값이 롤 토토에 포함됩니다.[,](,). 이러한 결 측값을 +/- 인피니티로 생각할 수는 있지만 특수 롤 토토 유형 값이며 모든 롤 토토 요소 유형의 +/- 인피니티 값으로 간주됩니다..

개념이있는 요소 유형Infinity명시 적 바운드 값으로 사용할 수 있습니다. 예를 들어 타임 스탬프 범위가있는[오늘, 인피니티)스페셜 제외타임 스탬프valueInfinitywhile[오늘, 인피니티]포함하여[오늘,)[오늘,].

함수lower_inf어퍼 _inf롤 토토의 무한 하부 및 상한을 테스트합니다.

8.17.5. 롤 토토 입력/출력#

범위 값에 대한 입력은 다음 패턴 중 하나를 따라야합니다.

(하위 바운드,상한)하위 바운드,상한]하위 바운드,상한)하위 바운드,상한]

괄호 또는 괄호는 앞에서 설명한 바와 같이 하부 및 상한이 배타적인지 또는 포괄적인지를 나타냅니다. 최종 패턴은는 빈 롤 토토 (포인트가없는 롤 토토)를 나타냅니다.

하위 바운드하위 유형에 대한 유효한 입력 인 문자열이거나 하한을 나타내지 않도록 비어있을 수 있습니다. 비슷하게,상한하위 유형에 대한 유효한 입력 인 문자열이거나 상한을 나타내지 않기 위해 비어있을 수 있습니다.

각 바운드 값을 사용하여 인용 할 수 있습니다"(이중 인용) 문자. 바운드 값에 괄호 안, 괄호, 쉼표, 이중 인용문 또는 백 슬래시가 포함 된 경우에 필요합니다. 왜냐하면이 문자는 롤 토토 구문의 일부로 간주되기 때문입니다."", 아무것도 쓰지 않기 때문에 무한한 경계를 의미합니다.

범위 값 전후에 공백이 허용되지만 괄호 나 브래킷 사이의 모든 공백은 하부 또는 상한 값의 일부로 간주됩니다. (요소 유형에 따라 중요하거나 중요하지 않을 수도 있습니다.)

Note

이 규칙은 복합 유형 리터럴에서 필드 값을 작성하는 것과 매우 유사합니다. 보다섹션 8.16.6추가 논평은

예 :

- 3 포함, 7은 포함되지 않으며 그 사이의 모든 지점을 포함합니다.

멀티 랜지의 입력은 곱슬 브래킷입니다 ({}) 쉼표로 분리 된 0 이상의 유효 롤 토토를 포함합니다. 뇌물과 쉼표 주변에는 흰색이 허용됩니다.

예 :

선택 '':: int4multirange;

8.17.6. 롤 토토 및 멀티 라인 제작#

각 범위 유형에는 범위 유형과 동일한 이름의 생성자 기능이 있습니다. 생성자 함수를 사용하는 것은 범위 문자가 상수를 작성하는 것보다 종종 더 편리합니다. 왜냐하면 경계 값의 추가 인용이 필요하지 않기 때문입니다.(), (], [)또는[]. 예를 들어:

- 전체 형식은 : 하한, 상한 및 텍스트 인수를 나타냅니다.

각 범위 유형에는 멀티 랜지 유형과 동일한 이름의 멀티 랜지 생성자가 있습니다. 생성자 함수는 적절한 유형의 범위 인 0 이상의 인수를 취합니다.

NumMultirange ()를 선택하십시오.

8.17.7. 이산 롤 토토 유형#

개별 롤 토토는 요소 유형이 잘 정의 된 것입니다Step:Integer또는날짜. 이러한 유형에서는 두 가지 요소가 인접 해 있다고 말할 수 있습니다.숫자유형은 롤 토토와 마찬가지로 연속적입니다타임 스탬프. (일지라도타임 스탬프정밀도가 제한되어 있으며 이론적으로 개별로 취급 될 수 있으므로 단계 크기가 일반적으로 관심이 없기 때문에 연속적으로 간주하는 것이 좋습니다.)

개별 롤 토토 유형에 대해 생각하는 또 다른 방법은 A에 대한 명확한 아이디어가 있다는 것입니다다음또는이전각 요소 값에 대한 값. 이를 알면 원래 주어진 것 대신 다음 또는 이전 요소 값을 선택함으로써 범위 범위의 포용 적 표현과 독점적 표현을 변환 할 수 있습니다.[4,8](3,9)동일한 값 세트를 나타냅니다. 그러나 이것은 숫자 이상의 범위에 적합하지 않을 것입니다.

개별 롤 토토 유형에 a가 있어야합니다.Canonicalization요소 유형의 원하는 단계 크기를 알고있는 함수. 정식화 함수는 범위 유형의 등가 값을 동일한 표현, 특히 일관되게 포용 적 또는 독점적 인 경계를 갖도록 변환하는 것으로 청구됩니다.

내장 롤 토토 유형int4Range, int8RangeDaterange모두 하한을 포함하고 상한을 제외하는 표준 형태를 사용합니다. 즉,[). 그러나 사용자 정의 롤 토토 유형은 다른 규칙을 사용할 수 있습니다.

8.17.8. 새로운 롤 토토 유형 정의#

사용자는 자신의 범위 유형을 정의 할 수 있습니다. 이를 수행하는 가장 일반적인 이유는 내장 롤 토토 유형에 제공되지 않은 하위 유형에 대한 범위를 사용하기 때문입니다.float8:

롤 토토로 FloatRange 유형 생성 (

왜냐하면float8의미가 없음Step, 우리는이 예에서 표준화 함수를 정의하지 않습니다.

자신의 롤 토토를 정의 할 때 자동으로 해당 멀티 레인지 유형을 얻습니다.

자신의 범위 유형을 정의하면 다른 하위 유형 B-Tree 연산자 클래스 또는 Collation을 지정하여 주어진 범위에 속하는 값을 결정하는 정렬 순서를 변경할 수 있습니다..

하위 유형이 연속 값이 아닌 이산을 갖는 것으로 간주되면유형 만들기명령을 지정해야합니다표준함수. 정식화 함수는 입력 범위 값을 취하며 다른 범위와 형식을 가질 수있는 동등한 범위 값을 반환해야합니다.[1, 7][1, 8)는 동일해야합니다. 형식이 다른 두 개의 동등한 값이 항상 동일한 형식으로 동일한 값에 매핑되는 한 어떤 표현을 정식으로 선택하는지는 중요하지 않습니다.타임 스탬프1 시간의 단계 크기를 가질 수있는 것으로 정의 될 수 있습니다.이 경우 표준화 함수는 한 시간이되지 않은 경계를 마무리하거나 오류를 대신 대신 오류를 던져야합니다..

또한 GIST 또는 SP-GIST 인덱스와 함께 사용되는 모든 범위 유형은 하위 유형 차이 또는를 정의해야합니다.subtype_diff, 함수. (색인은 여전히 ​​작동하지 않습니다subtype_diff, 그러나 차이 함수가 제공되는 경우보다 상당히 덜 효율적일 수 있습니다.) 하위 유형 차이 함수는 하위 유형의 두 입력 값을 취하고 차이를 반환합니다 (예 :.X마이너스Y)으로 표시float8값. 위의 예에서는 함수float8mi정기의 기초float8마이너스 작업자를 사용할 수 있습니다. 그러나 다른 하위 유형의 경우 일부 유형 변환이 필요합니다.subtype_diff함수는 선택한 연산자 클래스 및 Collation이 암시하는 정렬 순서와 일치해야합니다. 즉, 첫 번째 인수가 정렬 순서에 따라 두 번째 인수보다 클 때마다 결과가 긍정적이어야합니다.

덜 단순화되지 않은 예제subtype_diff함수는 :

함수 생성 time_subtype_diff (x time, y time)는 float8을 반환합니다

참조유형 만들기롤 토토 유형 생성에 대한 자세한 정보.

8.17.9. 인덱싱#

롤 토토 유형의 테이블 열에 대해 GIST 및 SP-GIST 인덱스를 만들 수 있습니다. 멀티 랜지 유형의 테이블 열에 대해서도 GIST 인덱스를 만들 수도 있습니다.

GIST를 사용하여 예약에서 인덱스 예약 _IDX 생성;

범위의 요점 또는 SP-Gist 인덱스는 이러한 범위 연산자와 관련된 쿼리를 가속화 할 수 있습니다.=, &&, <@, @>, <<, , -|-, &<&. 멀티 랜지의 GIST 지수는 동일한 멀티 랜지 연산자와 관련된 쿼리를 가속화 할 수 있습니다.&&, <@, @>, <<, , -|-, &<&. 보다표 9.56자세한 내용은

또한 롤 토토 유형의 테이블 열에 대해 B- 트리 및 해시 인덱스를 만들 수 있습니다. 이러한 인덱스 유형의 경우 기본적으로 유용한 롤 토토 작업은 평등입니다.<운영자이지만 주문은 임의적이며 일반적으로 실제 세계에서 유용하지 않습니다. Range Type 'B-Tree 및 Hash 지원은 주로 실제 인덱스 생성보다는 내부적으로 정렬 및 해싱을 허용하기위한 것입니다.

8.17.10. 롤 토토에 대한 제약#

while고유 한는 스칼라 값에 대한 자연스러운 제약 조건이며, 일반적으로 범위 유형에 부적합합니다. 대신, 제외 제약 조건이 종종 더 적합합니다 (참조테이블 작성 ... 제약 ... 제외). 제외 제약 조건은와 같은 제약 조건의 사양을 허용합니다.비 겹치기범위 유형에서. 예를 들어:

테이블 예약 생성 (

그 제약 조건은 동시에 테이블에 존재하는 겹치는 값을 방지합니다 :

예약 값에 삽입하십시오

당신은를 사용할 수 있습니다btree_gist일반 스칼라 데이터 유형에 대한 제외 제약 조건을 정의하기위한 확장 및 최대 유연성을 위해 롤 토토 제외와 결합 할 수 있습니다. 예를 들어, 이후btree_gist가 설치되어 있습니다. 다음 제약 조건은 회의실 번호가 동일 한 경우에만 중첩 범위를 거부합니다.

확장 생성 btree_gist;

정정 제출

올바른 문서에 아무것도 표시되면 일치하지 않습니다.이 양식문서 문제를보고하려면