Postgresql: 조건부 고유 제약 조건
테이블의 일부에서만 열에 고유성을 적용하는 제약 조건을 추가하려고 합니다.
ALTER TABLE stop ADD CONSTRAINT myc UNIQUE (col_a) WHERE (col_b is null);
그WHERE
위의 부분은 희망사항입니다.
방법은 없나요?아니면 관계 제도판으로 돌아가야 하나요?
PostgreSQL은 부분(즉, 조건부)을 정의하지 않습니다.UNIQUE
제약 조건 - 그러나 부분 고유 인덱스를 만들 수 있습니다.
PostgreSQL은 고유한 인덱스를 사용하여 고유한 제약 조건을 구현하므로 효과는 동일하며, 중요한 주의 사항은 업버트를 수행할 수 없다는 것입니다.ON CONFLICT DO UPDATE
) 고유한 제약 조건에 대항하는 것처럼 고유한 인덱스에 대항합니다.
또한 에 나열된 제약 조건을 볼 수 없습니다.information_schema
.
CREATE UNIQUE INDEX stop_myc ON stop (col_a) WHERE (col_b is NOT null);
PG는 부분적(즉, 조건부) 고유 제약 조건을 정의하지 않는다고 이미 말했습니다.또한 문서에 따르면 테이블에 고유 제약 조건을 추가하는 선호되는 방법은 다음과 같습니다.ADD CONSTRAINT
고유 인덱스
테이블에 고유 제약 조건을 추가하는 기본 방법은 ALTER TABLE ... ADD CONSTRAINT입니다.고유한 제약 조건을 적용하기 위해 인덱스를 사용하는 것은 직접 액세스해서는 안 되는 구현 세부사항으로 간주될 수 있습니다.그러나 고유한 열에 인덱스를 수동으로 작성할 필요는 없습니다. 이렇게 하면 자동으로 작성된 인덱스가 복제됩니다.
제외 제약 조건을 사용하여 구현할 수 있는 방법이 있습니다(이 솔루션에 대해 @dukelion 감사합니다).
당신의 경우에는 다음과 같이 보일 것입니다.
ALTER TABLE stop ADD CONSTRAINT myc EXCLUDE (col_a WITH =) WHERE (col_b IS null);
언급URL : https://stackoverflow.com/questions/16236365/postgresql-conditionally-unique-constraint
'programing' 카테고리의 다른 글
Git의 텍스트 창을 종료하려면 어떻게 해야 합니까? (0) | 2023.05.25 |
---|---|
WPF의 XAML에서 데이터 컨텍스트 설정 (0) | 2023.05.25 |
angular-cli server - 기본 포트를 지정하는 방법 (0) | 2023.05.25 |
Linkq 스타일 "각각" (0) | 2023.05.25 |
Python3에서 printf처럼 인쇄하는 방법은? (0) | 2023.05.25 |