8.17. 토토 베이 유형

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

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

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

8.17.1. 내장 토토 베이 및 다중 방송 유형

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

  • int4Range- 토토 베이정수, int4multirange- 해당 멀티 랜지

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

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

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

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

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

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

8.17.2. 예

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

참조표 9.53and표 9.55토토 베이 유형의 연산자 및 기능의 전체 목록.

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

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

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

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

8.17.4. 무한 (무한) 토토 베이

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

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

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

8.17.5. 토토 베이 입력/출력

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

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

괄호 또는 브래킷은 이전에 설명 된 바와 같이 하부 및 상한이 독점적인지 또는 포괄적인지를 나타냅니다. 최종 패턴은는 빈 토토 베이 (포인트가없는 토토 베이)를 나타냅니다.

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

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

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

Note

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

예 :

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

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

예 :

선택 '':: int4multirange;

8.17.6. 토토 베이 및 멀티 라인 제작

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

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

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

nummultirange ()를 선택하십시오.

8.17.7. 이산 토토 베이 유형

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

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

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

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

8.17.8. 새로운 토토 베이 유형 정의

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

토토 베이로 FloatRange 유형 생성 (

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

자신의 토토 베이를 정의 할 때 자동으로 해당 멀티 랜지 유형을 가져옵니다.

자신의 범위 유형을 정의하면 다른 하위 유형 B- 트리 연산자 클래스 또는 Collation을 사용할 수 있으므로 주어진 범위로 떨어지는 값을 결정하는 정렬 순서를 변경할 수 있습니다..

하위 유형이 연속 값이 아닌 이산을 갖는 것으로 간주되면유형 만들기명령을 지정해야합니다표준함수. 정식화 함수는 입력 범위 값을 취하며 다른 범위와 형식을 가질 수있는 동등한 범위 값을 반환해야합니다.[1, 7]and[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.53자세한 내용은

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

8.17.10. 토토 베이에 대한 제약

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

테이블 예약 생성 (

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

예약 값에 삽입하십시오

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

확장 생성 btree_gist;

정정 제출

문서에 올바른 것이 없다면 일치하지 않습니다.이 양식문서 문제를보고하려면