고유 제약 조건에 조건 추가

Dec 05 2020

현재 테이블에 다음과 같은 제약이 있습니다.

ALTER TABLE myTable
            ADD CONSTRAINT unique_row UNIQUE (content_id, brand_id, language_id);

제약 조건에 조건을 추가하고 싶습니다. 제약 조건이 동일한 방식으로 작동하기를 원하지만 is_archived가 FALSE 인 단일 행만 사용합니다.

ALTER TABLE myTable
         ADD CONSTRAINT unique_row UNIQUE (content_id, brand_id, language_id, !is_archived);

그러나 이렇게하면 구문 오류가 발생합니다.

경우 is_archived = true의 같은 조합으로 다음 여러 행 content_id과는 brand_id사용할 수 있습니다. 기본적으로 동일한 여러 행을 보관할 수 있지만 하나만 보관 취소 할 수 있습니다.

답변

4 Colin'tHart Dec 05 2020 at 00:59

Postgres는 부분적으로 고유 한 제약 조건을 허용하지 않지만 부분 고유 인덱스를 지원합니다.

create unique index unique_row on myTable(content_id, brand_id) where not is_archived;

Postgres 설명서의 부분 인덱스 를 참조하십시오 .

이러한 제약은 어쨌든 고유 인덱스로 구현되기 때문에 이것은 사실상 고유 제약 조건과 거의 동일합니다.