programing

Postgresql: 조건부 고유 제약 조건

javamemo 2023. 5. 25. 21:21
반응형

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

반응형