2016-06-13 13 views
2

날짜 중복을 방지하기 위해 postgresql 테이블에 제약 조건을 추가하는 방법이 있습니까? 예를 들어 workouts이라는 테이블에 날짜 열 week_start, week_end이 있습니다. week_start - week_end 범위 중 어느 것도 기존 범위와 겹치지 않도록하고 싶습니다. 그러나 week_start의 종료일은 week_end의 시작일과 겹칠 수 있습니다.날짜 중복 방지 postgresql

누군가 도움을 줄 수 있습니까?

미리 감사드립니다.

+0

그래서 주 번호를 사용하고 있습니까? 그렇다면, 주간에 중복이 있어서는 안됩니다. – Patrick

답변

3

당신은 daterange typeoverlap operator (&&)를 사용하여, exclusion constraint하여이 작업을 수행 할 수 있습니다

CREATE TABLE workouts (
    week_start DATE, 
    week_end DATE, 
    EXCLUDE USING gist (daterange(week_start, week_end) WITH &&) 
) 
+0

감사합니다. week_start의 끝과 week_end의 시작이 겹치도록 허용할까요? 예를 들어 6/1 - 6/3 및 6/3 - 6/4은 허용되어야합니다. –

+0

@ user1547174 : 네, daterange() 함수는 하한을 포함하고 상한을 제외합니다. –

+0

Gotcha - 'alter table workouts 제약 조건을 추가하려면 명령을 사용했습니다. gyst (daterange (week_start, week_end) WITH &&);'을 제외하고 '오류가 발생했습니다 : 구문 오류가 발생했습니다'또는 '근처에서 사용 중입니다.' 구문 오류가 무엇인지 알 수 있습니까? –

1

당신은 중복을 감지 범위에서 작동 다음 테이블 정의에 EXCLUDE 테이블 제약 조건을 추가 할 수 있습니다. 테이블 정의를 변경하여 week_startweek_end 열을 단일 범위 (예 : weeks)로 바꿀 수 있다면 정말 좋습니다.

CREATE TABLE workouts (
    ... 
    weeks intrange 
    EXCLUDE USING gist (weeks WITH &&) 
);