pgsql에서 unique index 관련 오류
글쓴이: 권순선 / 작성시간: 화, 2003/11/18 - 9:03오전
http://kldp.net 업그레이드 과정에서 다음과 같은 오류가 발생합니다.
ERROR: Cannot create unique index. Table contains non-unique values 이 부분이 핵심내용 같고, 뭔가 값이 중복되어 있는 것 같은데 어떻게 찾을 수 있을지, 정확한 의미는 무엇인지...아무튼 어떤 힌트라도 좋으니 부탁드립니다....
Quote:
Upgrading your database scheme from 2.5
DBD::Pg::st execute failed: ERROR: Cannot create unique index. Table contains non-unique values at /usr/lib/gforge/bin/db-upgrade.pl line 428. Transaction aborted because Uncaught exception from user code:
DBD::Pg::st execute failed: ERROR: Cannot create unique index. Table contains non-unique values at /usr/lib/gforge/bin/db-upgrade.pl line 428.
eval {...} called at /usr/lib/gforge/bin/db-upgrade.pl line 42 Transaction aborted because Uncaught exception from user code:
DBD::Pg::st execute failed: ERROR: Cannot create unique index. Table contains non-unique values at /usr/lib/gforge/bin/db-upgrade.pl line 428.
eval {...} called at /usr/lib/gforge/bin/db-upgrade.pl line 42 Last SQL query was: CREATE UNIQUE INDEX usergroup_uniq_groupid_userid ON user_group(group_id,user_id); (end of query)
Your database schema is at version 2.5.9999.1+temp+data+dropped Please report this bug on the Debian bug-tracking system. Please include the previous messages as well to help debugging. You should not worry too much about this, your DB is still in a consistent state and should be usable.
Forums:
짧은 소견으로 말씀드리자면...업그레이드 이전에는 unique i
짧은 소견으로 말씀드리자면...
업그레이드 이전에는 unique index가 걸려 있지 않았던 거 같은데 업그레이드 과정에서 index를 걸다보니 해당 컬럼에서 중복된 값이 발견된 것 같습니다.
아마 db-upgrade.pl 펄 소스 안에 create index SQL문이 있는 거 같은데 인덱스 대상 컬럼을 찾아서 직접 DB에서 중복되는 레코드를 찾아 지워주거나 중복되지않게 컬럼 업데이트를 해야 될 것 같네요.
중복된 값을 찾는 SQL문은 테이블이 table이고 해당 컬럼이 cc라면...
select cc, count(cc) from table group by cc having count(cc) >= 2
정도로 입력하시면 중복되는 값과 중복 횟수를 각각 출력할 것입니다.
노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5
Re: pgsql에서 unique index 관련 오류
에러가 난 쿼리문 출력이 있네요.
group_id, user_id에 대한 UNIQUE INDEX 생성 실패입니다.
User_group테이블에서 group_id와 user_id에 존재하는 중복값을 제거해줘야합니다.
(user_id에 group_id가 할당이 되어있는게 아닐까 싶은 생각도 드는데... 그런식이라면 쿼리 자체가 조금 이상하다는 느낌이네요)
ok...많은 조언 감사합니다. 제가 mysql만 사용하다 보니 pgsq
ok...많은 조언 감사합니다. 제가 mysql만 사용하다 보니 pgsql은 마치 코끼리가 장님 만지듯이 제대로 그림을 보지 못하고 더듬거리기만 하고 있네요. 중복된 user_id, group_id를 찾아야 한다는 얘기는 어젯밤에도 들었고요. 구체적으로 그것을 "어떻게" 찾아서 "어떻게" 지워야 하는지 잘 모르겠네요.
아래는 pgsql을 실행해서 gforge라는 database를 다루는 부분입니다. select를 아무리 해 봐도 화면상에 아무것도 나오지를 않네요. 죄송하지만 중복되는 부분을 "어떻게" 찾아서 "어떻게" 지우는지 좀더 자세한 설명 부탁드립니다.
감사합니다....
혹시 ; 을 빼먹으신건 아니지요?
혹시 ; 을 빼먹으신건 아니지요?
아무것도 안 나온다는게... 위의 쿼리를 실행하셨을 때 말씀하신 건가요.
아무것도 안 나온다는게... 위의 쿼리를 실행하셨을 때 말씀하신 건가요...?
저게 실행했던 그대로 붙이신 거라면...
SQL문 뒤에 ';'를 안 붙이셔서 그런 것 같거든요...-_-
제 pgsql의 프롬프트는 이렇습니다.
eminency=>
그런데 ';'를 붙이지 않고 엔터를 치면 다음과 같이 바뀌는데..
eminency->
MySQL의 '->' 프롬프트처럼 멀티라인 입력을 받는 것인데 제가 보기엔 아마 그래서 아무것도 출력이 되지 않는 것 같거든요.
인덱스 대상 컬럼이 두개이니 다음 SQL로 테스트 해보시기 바랍니다.
두 번 이상 출현하는 user_id, group_id의 페어를 찾는 SQL입니다.
노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5
아 그렇군요. 8) gforge라는 db에 대해서 수행해 보니
아 그렇군요. 8)
gforge라는 db에 대해서 수행해 보니 다음과 같은 결과가 나왔고요.
sourceforge라는 db에 대해서도 마찬가지 결과가 나왔네요.
그럼 이제 어떻게 해야 하는지요?
[quote]select user_group_id from user_gr
로 pk 인 user_group_id 값을 확인하시고
하나만 두고 지우시거나 user_id, group_id 값을 바꿔주면 되지 않을까 싶은데요?
user_id에 관련된 문제는 해결이 된 것 같습니다. 도움주신 분들께
user_id에 관련된 문제는 해결이 된 것 같습니다. 도움주신 분들께 대단히 감사드립니다. 그런데 이제는 또다른 문제가 나타났군요. 기존에 에러가 발생했던 부분 이후에 수행되는 부분에서 나타난 에러로 보입니다.
의 의미가 무엇인지, 어떻게 해결해야 하는지 좀 알려 주시면 대단히 감사드리겠습니다.
foreign key 참조 에러네요.doc_data의 doc_grou
foreign key 참조 에러네요.
doc_data의 doc_group 값이 doc_groups 테이블에
없어서 에러가 나는건데,
로 doc_groups 에 없는 doc_group 값 확인하시고
doc_groups 에 데이터를 넣어주면 되지 않을까 싶습니다. ^^;
(자신감 부족;;;)
앞에 말씀드렸던 모든 문제들은 해결이 되었는데 또다른 에러가 발생하였네요
앞에 말씀드렸던 모든 문제들은 해결이 되었는데 또다른 에러가 발생하였네요. 8)
에러가 하나 나올때마다 참 마음이 새롭습니다. :? 혹시 해결 방법을 아시는 분이 계시면 도움 부탁드립니다....
아 그러고 보니 앞의 에러와 유형이 거의 비슷하군요. 정신이 없다 보니
아 그러고 보니 앞의 에러와 유형이 거의 비슷하군요. 정신이 없다 보니 자세히 비교를 안했네요.
앞의 에러 해결 방법을 참고해서 한번 쿼리를 날려 봐야겠군요. :o
댓글 달기