2012-10-16 3 views
5

PG 위치 :문제 해결 고유 제한

독자적인 이메일을 포함하는 사용자 테이블을 만들었지 만 이메일은 고유하지 않아야한다고 결정했습니다. 나는 이메일 필드가 비 고유 (ORM을 사용하므로 실제로 정확한 SQL이 생성되지는 않음)하도록 변경을가했지만 PG는 여전히 중복 이메일 주소를 사용하지 못하게합니다.

색인을 검사했는데 고유하지는 않지만 중복 된 이메일 주소를 유지하는 데 제약이 있습니다. 그러나이 제약 조건을 떨어 뜨리는 데 문제가 있습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

SQL> ALTER TABLE "users" DROP CONSTRAINT "unique_users_email" 
PGError: ERROR: constraint "unique_users_email" of relation "users" does not exist 

SQL> UPDATE users SET email = '[email protected]' 
PGError: ERROR: duplicate key value violates unique constraint "unique_users_email" 
DETAIL: Key (email)=([email protected]) already exists. 
+0

아마도 변경 사항을 적용 할 수있는 곳이 있습니까? 또한 , 시도 : '표를 ALTER "사용자" 해제 CONSTRAINT "unique_users_email을"; work.'PGError하지 않았다 jt234 @' – jt234

+0

: ALTER TABLE : LINE 1 구문 오류에서 또는 근처 "CONSTRAINT"오류를 "users"disable CONSTRAINT "unique_users_email"; "이 변경 사항을 제외하고 변경 사항은 정상적으로 처리되고있는 것 같습니다. – AlexQueue

+0

어때요? DISABLE TRIGGER ALL? – jt234

답변

3

나는 "unique_users_email는"실제로 고유 인덱스보다는 제약 조건의 이름입니다 내기. 시도 : 테이블의 \d 설명을 볼 때 psql의의

DROP INDEX "unique_users_email";

최신 버전은 당신에게 고유 인덱스와 고유 제한 조건의 차이를 알려 주어야합니다.

+0

테이블이 공용 스키마의 일부가 아닌 경우 스키마를 지정해야합니다. DROP INDEX myschema.unique_users_email; – buddamus