Django + Postgresql에서 duplicate key value violates unique constraint 오류
0. 환경
- Python 3.7
- Django 1.11
- Postgresql 9.6
Django 관리자 페이지에서 row를 추가하려니 "duplicate key value violates unique constraint"오류가 발생했다.
http://searene.me/2016/01/10/django-db-utils-IntegrityError-duplicate-key-value-violates-unique-constraint/ 이 페이지 참조해서 sequence를 바꿔주었다.
1. 데이터베이스 접속
\list로 데이터 베이스 이름 확인 후 \connect [데이터베이스이름] 으로 수정할 데이터베이스에 접속한다.
2. id 최댓값 확인
sequence의 마지막 값(=해당 테이블의 마지막 id)는 아래 명령어로 확인할 수 있다.
SELECT last_value FROM [sequence이름];
sequence이름은 보통 [테이블이름]_id_seq이고,
django에서 만들어주는 테이블 이름은 [앱이름(소문자)]_[모델이름(소문자)]이니까 보통은 [앱이름]_[모델이름]_id_seq로 찾으면 된다.
처음 테이블을 만든 후 모델이름을 수정해도 sequence이름까지 바뀌진 않으니 아래 명령어로 정확히 확인해보자.
SELECT c.relname FROM pg_class c WHERE c.relkind = 'S';
sequence의 last_value가 해당 테이블의 마지막 id가 아니면 sequence를 수정해야 한다.
3. sequence 수정
ALTER SEQUENCE [sequence이름] RESTART WITH [마지막id+1];
- Python 3.7
- Django 1.11
- Postgresql 9.6
Django 관리자 페이지에서 row를 추가하려니 "duplicate key value violates unique constraint"오류가 발생했다.
http://searene.me/2016/01/10/django-db-utils-IntegrityError-duplicate-key-value-violates-unique-constraint/ 이 페이지 참조해서 sequence를 바꿔주었다.
1. 데이터베이스 접속
\list로 데이터 베이스 이름 확인 후 \connect [데이터베이스이름] 으로 수정할 데이터베이스에 접속한다.
2. id 최댓값 확인
sequence의 마지막 값(=해당 테이블의 마지막 id)는 아래 명령어로 확인할 수 있다.
SELECT last_value FROM [sequence이름];
sequence이름은 보통 [테이블이름]_id_seq이고,
django에서 만들어주는 테이블 이름은 [앱이름(소문자)]_[모델이름(소문자)]이니까 보통은 [앱이름]_[모델이름]_id_seq로 찾으면 된다.
처음 테이블을 만든 후 모델이름을 수정해도 sequence이름까지 바뀌진 않으니 아래 명령어로 정확히 확인해보자.
SELECT c.relname FROM pg_class c WHERE c.relkind = 'S';
sequence의 last_value가 해당 테이블의 마지막 id가 아니면 sequence를 수정해야 한다.
3. sequence 수정
ALTER SEQUENCE [sequence이름] RESTART WITH [마지막id+1];