장고 데이터베이스 ID 리셋하기

소요 시간: 5분

오늘은 장고 프로젝트에서 데이터베이스의 ID를 다시 1부터 시작하는 방법에 대해 배우기로 했다. 테스트로 데이터를 많이 생성하다 보니 어느새 ID가 세자리, 네자리 수를 넘어가고 있었고, 이 모습이 왠지 불편하게 느껴졌다. 정리하고 싶다는 생각이 들어 장고의 기능을 이용해 리셋을 해보기로 했다.


첫 번째 단계: ID 리셋 명령어 실행

장고에서 제공하는 기능을 이용해 아래의 명령어를 입력했다:

$ python manage.py sqlsequencereset app_name

이 명령어는 지정한 앱의 모든 시퀀스를 리셋해준다. 만약 PostgreSQL을 사용하고 있다면 다음과 같이 추가 명령어를 입력해야 한다:

$ python manage.py sqlsequencereset app_name | psql

하지만, 이때 데이터베이스에 로그인한 사용자와 데이터베이스의 사용자명이 다르면 에러가 발생할 수 있다는 점을 주의해야 했다.


두 번째 단계: PostgreSQL 접속 오류 해결

실제로 psql 명령어를 실행해보니 에러 메시지가 뜨는 바람에 깜짝 놀랐다. 메시지는 이러했다:

psql: error: FATAL: database "username" does not exist

이럴 땐 데이터베이스에 직접 접속하여 SQL 명령어로 ID를 리셋해야 했다. 이렇게 하기로 마음먹고, 차근차근 진행하기로 했다.

1. 데이터베이스 목록 조회하기:

\l

2. 해당 데이터베이스 연결하기:

\c database_name

3. 테이블 리스트 조회하기:

\dt

이렇게 진행한 후, 원하는 테이블을 찾고 나서 ID를 1로 리셋하는 명령어를 실행했다.


세 번째 단계: ID 리셋 실행

특정 테이블의 ID를 리셋하는 명령어는 다음과 같다:

ALTER SEQUENCE table_name_id_seq RESTART WITH 1;

내가 원하는 posts 앱의 post 모델을 리셋하고 싶다면 다음과 같이 입력해야 했다:

ALTER SEQUENCE posts_post_id_seq RESTART WITH 1;

이 명령어를 실행한 후, 성공적으로 리셋이 완료되었다는 메시지를 확인했다.


네 번째 단계: 확인 작업

마지막으로, 장고의 Admin 페이지에서 새로운 데이터를 생성해보았다. 정말로 ID가 1부터 저장되는지를 확인하기 위해 여러 개의 포스트를 추가해보았고, 모든 포스트의 ID가 1부터 시작한다는 것을 확인했다. 이 순간, 불편했던 시퀀스가 정리된 기분이 들어서 매우 뿌듯했다.


오늘 하루, 장고의 데이터베이스 ID를 리셋하는 과정을 통해 많은 것을 배웠다. 특히, 오류 상황을 대처하는 법과 SQL 명령어의 중요성을 깨닫게 된 점이 인상 깊었다. 이제 앞으로는 데이터가 늘어나더라도 언제든지 ID를 깔끔하게 리셋할 수 있을 것 같다. 뿌듯한 마음으로 하루를 마무리한다.

장고 리스트