답변:
즉, subset
if 고유해야 type = 'true'
합니다. 부분 고유 인덱스는 그렇게 할 것입니다 :
CREATE UNIQUE INDEX tbl_some_name_idx ON tbl (subset) WHERE type = 'true';
이렇게하면 NULL
고유 한 조합을 만들 수도 있습니다 .이 관련 답변에 자세히 설명 된 것처럼
PostgreSQL 다중 열 고유 제약 조건 및 NULL 값
이것은 위의 Erwin의 답변을 보완하지만 PostgreSQL은 여러 유형의 인덱스를 지원합니다. 이들은 일반적으로 상호 배타적이지 않습니다. 다음과 같이 생각할 수 있습니다.
이들은 모두 다양한 방식으로 결합 될 수 있습니다. 여기서 수행하는 작업은 고유 한 기능과 부분 기능을 사용하는 것이므로 부분적으로 고유 한 인덱스를 제공합니다 (발견 할 때 매우 유용함).
그러나 type이 true 인 서브 세트 필드에 대소 문자를 구분하지 않는 색인 을 원한다고 가정하십시오 . 그런 다음 기능 정의를 추가합니다.
CREATE INDEX my_index_name_idx_u ON tbl (lower(subset)) WHERE type;
이렇게하면 type이 true 인 하위 집합 속성에서 호출 된 lower () 함수 의 출력 에 고유 인덱스가 생성 됩니다.