복붙노트

[SQL] 독특한 날짜 범위에 대한 포스트 그레스 제약

SQL

독특한 날짜 범위에 대한 포스트 그레스 제약

내 표는 두 개의 열이 있습니다

홀드 날짜와 시간을 모두. 나는 제약 다음 만들고 싶어 :

모두 열이 NULL이 아닌 경우 다음 startsAt 및 endsAt해야하지 중복 다른 범위와 (다른 행에서) 사이의 범위.

해결법

  1. ==============================

    1.당신은 별도의 타임 스탬프 열을 유지하고 여전히 표현에 제외 제약 조건을 사용할 수 있습니다 :

    당신은 별도의 타임 스탬프 열을 유지하고 여전히 표현에 제외 제약 조건을 사용할 수 있습니다 :

    CREATE TABLE tbl (
       tbl_id    serial PRIMARY KEY
     , starts_at timestamp
     , ends_at   timestamp
     , EXCLUDE USING gist (tsrange(starts_at, ends_at) WITH &&) -- no overlapping
    );
    

    tsrange (starts_at, ends_at)와 같은 명시적인 경계없이 tsrange 값을 구축 자동으로 기본 범위를 가정합니다 낮은 포함 상부 제외 - '[)', 일반적으로 가장 적합한.

    SQL 바이올린.

    관련 :

    ALTER TABLE tbl ADD CONSTRAINT tbl_no_overlapping_time_ranges
    EXCLUDE USING gist (tsrange(starts_at, ends_at) WITH &&)
    

    구문 세부 사항은 테이블 만들기와 동일합니다.

  2. from https://stackoverflow.com/questions/26735955/postgres-constraint-for-unique-datetime-range by cc-by-sa and MIT license