Skip to content

Django Tips #
Find similar titles

Structured data

Category
Programming
Database

개요 #

Django 개발을 하며 공유할만한 Tip들을 모아봅시다.

How to reset a Django Sequences #

Django 개발을 하고 데이터를 다루다 보면 데이터베이스 테이블의 시퀀스를 초기화가 필요할 때가 있다. 데이터를 등록하고 지우다 보면 pk(id)값이 계속 증가하는데, 방법을 잘 모를때는 그냥 데이터베이스를 날리고 새로 만들었다. 개발 단계이고 혼자 사용하는 DB라면 문제가 없는데 운영단계이거나 여러 사람이 같이 사용하는 DB라면 쉽게 날리고 만들 수가 없다. 또한 다른 테이블은 건드리지 않고 특정 테이블만 초기화 하고 싶을때, 이때면 DB단에서 직접 조작해줄 수 밖에 없다.

Django에서는 이를 지원하기 위한 명령어가 존재한다.

python manage.py sqlsequencereset [app_label]

App 이름을 넣고 위 명령어를 실행하면 아래 처럼 sequence를 초기화 할 수 있는 SQL 문을 얻을 수 있다.

(base) uastory-pro: test$ python manage.py sqlsequencereset auth
BEGIN;
SELECT 
  setval(
    pg_get_serial_sequence('"auth_permission"','id'),          
    coalesce(max("id"), 1),
    max("id") IS NOT null
  ) FROM "auth_permission";
SELECT 
  setval(
    pg_get_serial_sequence('"auth_group_permissions"','id'), 
    coalesce(max("id"), 1),
    max("id") IS NOT null
   ) FROM "auth_group_permissions";
SELECT 
  setval(
  pg_get_serial_sequence('"auth_group"','id'),
  coalesce(max("id"), 1),
  max("id") IS NOT null
  ) FROM "auth_group";
COMMIT;

이렇게 얻은 SQL문을 DB에서 실행하면 된다. python manage.py dbshell 명령을 통해 쉽게 DB 접속을 할 수 있다.

(base) uastory-pro: test$ python manage.py dbshell
psql (10.14)
Type "help" for help.

test=>

물론 실행 전 충돌 안 나게 데이터는 정리한 상태여야 할 것이다. 데이터가 존재하는데 sequence가 초기화되면 같은 id의 데이터가 만들어질 수 있으니, 에러가 발생할 수 있을 것이다.

Suggested Pages #

0.0.1_20210630_7_v33