고유 제약 조건에 조건 추가
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 설명서의 부분 인덱스 를 참조하십시오 .
이러한 제약은 어쨌든 고유 인덱스로 구현되기 때문에 이것은 사실상 고유 제약 조건과 거의 동일합니다.