이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 8.17. 토토 결과 유형버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

8.17. 범위 토토 사이트 순위

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

범위 유형은 많은 요소를 나타 내기 때문에 유용합니다 단일 범위 값의 값과 다음과 같은 개념 때문에 겹치는 범위는 명확하게 표현 될 수 있습니다. 시간과 사용 예약 목적을위한 날짜 범위가 가장 분명한 예입니다. 하지만 가격 범위, 측정 기기 등의 범위 등 유용 할 수 있습니다.

8.17.1. 내장 범위 토토 사이트 순위

PostgreSQL은 다음과 같은 내장 범위와 함께 제공됩니다 유형 :

  • int4Range- 범위정수

  • int8Range- 범위bigint

  • NumRange- 범위숫자

  • tsrange- 범위시간대가없는 타임 스탬프

  • TSTZRANGE- 범위시간대가있는 타임 스탬프

  • Daterange- 범위날짜

또한 자신의 범위 토토 사이트 순위을 정의 할 수 있습니다. 보다PostgreSQL : 문서더 많은 정보.

8.17.2. 예

테이블 예약 생성 (TsRange 중 룸 int);
예약 값에 삽입하십시오
    (1108, '[2010-01-01 14:30, 2010-01-01 15:30)');

-- 방지
int4Range (10, 20) @ 3을 선택하십시오.

- 겹침
NumRange (11.1, 22.2) && NumRange (20.0, 30.0)를 선택하십시오.

- 상한을 추출하십시오
상단 (int8Range (15, 25))를 선택하십시오.

- 교차로를 계산하십시오
int4Range (10, 20) * int4Range (15, 25)를 선택하십시오.

- 범위가 비어 있습니까?
select isempty (numrange (1, 5));

참조표 9-44and테이블 9-45범위의 연산자 및 기능의 전체 목록 토토 사이트 순위.

8.17.3. 포용적이고 독점적입니다 범위

Every non-empty range has two bounds, the lower bound and the upper bound. All points between these values are included in the range. An inclusive bound means that the boundary point itself is included in the range as well, while an exclusive bound means that the boundary point is not included in the range.

범위의 텍스트 형태에서 포괄적 인 하한은 대표"["독점적 인 하한은입니다 대표"(". 마찬가지로, 포괄적 인 상한은입니다 대표"]", 독점적 인 상한은입니다 대표")". (보다섹션 8.17.5더 많은 것 세부.)

함수lower_incand어퍼_inc범위 값의 하한 및 상한.

8.17.4. 무한 (무한) 범위

범위의 하한은 생략 될 수 있습니다. 상한보다 적은 점이 범위에 포함됩니다. 마찬가지로, 범위의 상한이 생략되면 하한보다 큰 점이 범위에 포함됩니다. 하한과 상한이 모두 생략되면 요소 토토 사이트 순위은 범위에있는 것으로 간주됩니다.

이것은 하한이임을 고려하는 것과 같습니다."마이너스 인피니티"또는 상한 이다"Plus Infinity"각각. 그러나 이러한 무한한 값은 결코 범위의 요소 토토 사이트 순위이며 결코 범위의 일부가 될 수 없습니다. (그래서 포괄적 인 무한 경계와 같은 것은 없습니다. 하나를 작성하려고하면 자동으로 변환됩니다. 독점 바운드.)

또한 일부 요소 토토 사이트 순위은이라는 개념이 있습니다."Infinity", 그러나 그것은 또 다른 값입니다 범위 유형 메커니즘에 관한 한. 예를 들어, 타임 스탬프 범위,[오늘,]와 똑같은 것[오늘,). 하지만[오늘, 인피니티][오늘, 인피니티)- 후자는 제외합니다 스페셜타임 스탬프valueInfinity.

함수lower_inf어퍼 _inf무한 하부를 테스트합니다 범위의 상한.

8.17.5. 범위 입력/출력

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

(하위 바운드,상한)
(하위 바운드,상한]
[하위 바운드,상한)
[하위 바운드,상한]
비어 있는

괄호 또는 괄호는 하위인지 여부를 나타냅니다 상한은 설명 된 바와 같이 배타적이거나 포괄적입니다 이전에. 최종 패턴은는 빈 범위를 나타냅니다 (범위 포인트가 포함되어 있지 않습니다.

the하위 바운드하위 토토 사이트 순위에 대한 유효한 입력 또는 비어있는 문자열 중 하나 하한이 없음을 나타냅니다. 비슷하게,상한그 문자열 일 수 있습니다 하위 토토 사이트 순위에 대한 유효한 입력이거나 상단이 없음을 나타내는 비어 있습니다. 경계.

각 바운드 값을 사용하여 인용 할 수 있습니다"(이중 인용) 문자. 이것은 필요합니다 바운드 값에 괄호, 괄호, 쉼표가 포함 된 경우 이 캐릭터가 있기 때문에 이중 인용문 또는 백 슬래시 그렇지 않으면 범위 구문의 일부로 사용됩니다. 더블을 넣으려면 인용 된 바운드 값의 견적 또는 백 슬래시는 백 슬래시. (또한, a 이중 인용문을 나타 내기 위해 두 배가 인용 된 바운드 값이 가져옵니다. 캐릭터, SQL의 단일 따옴표 규칙과 유사하게 문자 문자열.) 또는 인용 및 사용을 피할 수 있습니다 모든 데이터 문자를 보호하기위한 백 슬래시 에스케이프 그렇지 않으면 범위 구문으로 간주됩니다. 또한, 경계를 씁니다 빈 문자열 인 값, 쓰기""경계.

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

참고 :이 규칙은 그 규칙과 매우 유사합니다 복합 토토 사이트 순위 리터럴에서 필드 값을 작성합니다. 보다섹션 8.16.6추가 논평.

예 :

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

- 3 또는 7이 포함되어 있지 않지만 그 사이에 모든 지점이 포함되어 있습니다.
선택 '(3,7)':: int4Range;

- 단일 포인트 4 만 포함합니다
'[4,4]':: int4Range;

- 포인트가 포함되지 않습니다 (그리고 '빈'으로 정규화됩니다)
선택 '[4,4)':: int4Range;

8.17.6. 범위 구성

각 범위 유형은 동일한 생성자 기능을 갖습니다. 이름을 범위 유형으로 지정하십시오. 생성자 함수 사용은 다음과 같습니다 범위 문자를 쓰는 것보다 종종 더 편리합니다 일정, 추가 인용이 필요하지 않기 때문에 바운드 값. 생성자 함수는 2 ~ 3을 허용합니다 논쟁. 두 가지 연계 형식은 표준의 범위를 구성합니다 형태 (하한 포함, 상한 독점) 3- 연계 형식 양식의 범위를 가진 범위를 구성합니다. 세 번째 인수에 의해 지정됩니다. 세 번째 주장은 하나 여야합니다 문자열"()", "(]", "[)"또는"[]". 예를 들어:

- 전체 형식은 : 하한, 상한 및 텍스트 인수를 나타냅니다.
- 바운드의 포괄 성/독점 성.
NumRange (1.0, 14.0, '(]')를 선택하십시오.

- 세 번째 인수가 생략되면 '[)'가 가정됩니다.
NumRange (1.0, 14.0)를 선택하십시오.

- '(]'가 여기에 지정되어 있지만 표시에서는 값이 변환됩니다.
-Canonical Form, Int8Range는 개별 범위 유형이므로 (아래 참조).
int8Range (1, 14, '(]')를 선택하십시오.

- 어느 한 바운드에 NULL을 사용하면 범위가 해당 측면에서 무한하게됩니다.
NumRange (NULL, 2.2); 선택

8.17.7. 이산 범위 토토 사이트 순위

이산 범위는 요소 토토 사이트 순위이 잘 정의 된"step":Integer또는날짜. ~ 안에 이러한 유형은 두 가지 요소가 인접 해 있다고 말할 수 있습니다. 그들 사이에 유효한 값은 아닙니다. 이것은 대조적입니다 항상 (또는 거의 항상) 인 연속 범위 주어진 두 가지 사이의 다른 요소 값을 식별 할 수 있습니다 값. 예를 들어,의 범위숫자토토 사이트 순위은 범위와 마찬가지로 연속적입니다타임 스탬프. (일지라도타임 스탬프정밀도가 제한되어 있으며 가능합니다 이론적으로 개별로 취급되는 것이 좋습니다 스텝 크기는 일반적으로 관심.)

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

개별 범위 토토 사이트 순위에 a가 있어야합니다.Canonicalization요소 유형에 원하는 단계 크기. 표준화 함수는 동등한 값을 변환하는 것으로 청구됩니다 특히 동일한 표현을 갖도록 범위 유형 지속적으로 포괄적이거나 독점적 인 범위. 경우 a 정식화 기능은 지정되지 않았으며 범위가 있습니다 다른 형식은 항상 불평등 한 것으로 취급됩니다 그들은 동일한 값 세트를 나타낼 수 있지만 현실.

내장 범위 토토 사이트 순위int4Range, int8RangeDaterange모두 포함하는 표준 형식을 사용합니다 하부는 상한을 배제합니다. 즉,[). 사용자 정의 범위 토토 사이트 순위은 사용할 수 있습니다 그러나 다른 컨벤션은

8.17.8. 새로운 범위 토토 사이트 순위 정의

사용자는 자신의 범위 유형을 정의 할 수 있습니다. 가장 일반적인 이를 수행 해야하는 이유는 제공되지 않은 하위 토토 사이트 순위에 대한 범위를 사용하는 것입니다. 내장 범위 토토 사이트 순위 중. 예를 들어, 새로운 것을 정의합니다 하위 토토 사이트 순위의 범위 유형float8:

범위로 FloatRange 유형 생성 (
    하위 토토 사이트 순위 = float8,
    subtype_diff = float8mi
);

'[1.234, 5.678]':: floatRange; 선택

때문에float8의미가 없음"step", 우리는 a를 정의하지 않습니다 이 예에서 표준화 기능.

하위 토토 사이트 순위이 연속 값,토토 사이트 순위 만들기명령을 지정해야합니다표준함수. 정식화 기능은 입력 범위를 취합니다 값, 그리고 가질 수있는 동등한 범위 값을 반환해야합니다. 다른 경계와 서식. 둘의 표준 출력 예를 들어 동일한 값 세트를 나타내는 범위 정수 범위[1, 7]and[1, 8)는 동일해야합니다. 중요하지 않습니다 당신이 정식으로 선택한 어떤 표현이든 형식이 다른 두 개의 동등한 값이라면 항상 동일한 형식으로 동일한 값에 매핑됩니다. ~ 안에 포용 적/독점 경계 형식 조정에 추가, a 표준화 함수는 경계 값을 반올림 할 수 있습니다 원하는 단계 크기는 하위 토토 사이트 순위보다 큽니다. 저장할 수 있습니다. 예를 들어, 범위 유형 오버타임 스탬프스텝 크기를 가질 수 있습니다 한 시간, 즉, 정식화 기능이 필요합니다. 한 시간 만에 없었던 경계를 마무리하기 위해 아마도 오류를 대신 던질 것입니다.

자신의 범위 유형 정의도 다른 하위 토토 사이트 순위 B-Tree 운영자 클래스 또는 사용할 수있는 콜레이션 어떤 값을 결정하는 정렬 순서를 변경하기 위해 주어진 범위로 떨어집니다.

또한 사용해야 할 모든 범위 유형 GIST 인덱스는 하위 토토 사이트 순위 차이를 정의해야합니다.subtype_diff, 함수. (요점 지수는 여전히 가능합니다 없이 일subtype_diff차이보다 훨씬 덜 효율적 일 가능성이 높습니다. 함수가 제공됩니다.) 하위 토토 사이트 순위 차이 함수는 사용됩니다 하위 토토 사이트 순위의 두 가지 입력 값과 차이를 반환합니다. (즉.,x마이너스y)로 표시float8값. 위의 예에서는 기능이 있습니다 그것은 정기적 인 것입니다float8마이너스 연산자를 사용할 수 있습니다. 그러나 다른 하위 토토 사이트 순위의 경우 어떤 유형 전환이 필요할 것입니다. 방법에 대한 창의적 생각 숫자가 필요할 수있는 차이점을 나타냅니다. 에게 가능한 가장 큰 범위,subtype_diff함수는 정렬에 동의해야합니다 선택한 운영자 클래스 및 콜라이트가 암시하는 주문; 즉, 그 결과는 첫 번째마다 긍정적이어야합니다. 논쟁은 그 종류에 따라 두 번째보다 큽니다. 주문.

참조PostgreSQL : 문서더 많은 범위 토토 사이트 순위 생성에 관한 정보.

8.17.9. 인덱싱

범위의 테이블 열에 대해 GIST 인덱스를 만들 수 있습니다. 유형. 예를 들어:

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

GIST 인덱스는 이러한 범위와 관련된 쿼리를 가속화 할 수 있습니다 운영자 :=, &&, <@, @, <<, , -|-, &<&(참조표 9-44자세한 정보).

또한 B- 트리 및 해시 인덱스는 범위 토토 사이트 순위의 표 열. 이러한 색인 토토 사이트 순위의 경우 기본적으로 유용한 범위 운영은 평등입니다. B- 트리가 있습니다 해당 범위 값에 대해 정의 순서 정렬<운영자이지만 주문은 다소 임의적이며 일반적으로 아닙니다. 현실 세계에서 유용합니다. 범위 유형의 B- 트리 및 해시 지원 주로 내부적으로 정렬 및 해싱을 허용하기위한 것입니다. 실제 인덱스 생성보다는 쿼리입니다.

8.17.10. 범위에 대한 제약

while고유 한는 자연 스럽습니다 스칼라 값에 대한 제약 조건은 일반적으로 부적합합니다 범위 유형. 대신, 배제 제약이 종종 더 많습니다 적절한 (참조테이블 생성 ... 제약 ... 제외). 제외 제약 조건이 허용됩니다 와 같은 제약 조건의 사양"비 겹치는"범위 토토 사이트 순위에서. 을 위한 예:

테이블 예약 생성 (
    tsrange 동안
    GIST 사용 (& A) 동안 제외
);

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

예약 값에 삽입하십시오
    ( '[2010-01-01 11:30, 2010-01-01 15:00)');
삽입 0 1

예약 값에 삽입하십시오
    ( '[2010-01-01 14:45, 2010-01-01 15:45)');
오류 : 충돌 키 값은 제외 제약 조건 "Reservation_During_Excl"을 위반합니다.
세부 사항 : 키 (기간) = ([ "2010-01-01 14:45:00", "2010-01-01 15:45:00")) 충돌
기존 키 (기간) = ([ "2010-01-01 11:30:00", "2010-01-01 15:00:00")..

당신은를 사용할 수 있습니다스포츠 토토 베트맨배제 정의를위한 확장 일반 스칼라 데이터 토토 사이트 순위에 대한 제약 조건이있을 수 있습니다. 최대 유연성을 위해 범위 제외와 결합합니다. 을 위한 예, 이후btree_gistis 설치하면 다음 제약 조건이 겹치는 것을 거부합니다 회의실 번호가 동일한 경우에만 범위 :

확장 생성 btree_gist;
테이블 생성 room_reservation (
    방 텍스트,
    tsrange 동안
    GIST 사용 (& with &에서 with =, with =, with with with with with)
);

room_reservation 값에 삽입하십시오
    ( '123a', '[2010-01-01 14:00, 2010-01-01 15:00)');
삽입 0 1

room_reservation 값에 삽입하십시오
    ( '123a', '[2010-01-01 14:30, 2010-01-01 15:30)');
오류 : 충돌 키 값은 제외 제약 조건 "room_reservation_room_during_excl"을 위반합니다.
세부 사항 : 키 (객실, 동안) = (123a, [ "2010-01-01 14:30:00", "2010-01-01 15:30:00") 충돌
기존 키 (객실, 동안) = (123a, [ "2010-01-01 14:00:00", "2010-01-01 15:00:00")).

room_reservation 값에 삽입하십시오
    ( '123b', '[2010-01-01 14:30, 2010-01-01 15:30)');
삽입 0 1