Computer Science/Troubleshooting

[Django] Migration/마이그레이션 충돌 시 해결방법들

_혀니 2022. 8. 19. 13:49
728x90
반응형

Django에서 제법 잘 발생하는 마이그레이션 충돌.

원인

  1. GitHub 등에 파일을 공유하면서 다른 사용자의 마이그레이션 파일을 내 컴퓨터에 받아오는 등 마이그레이션 파일이 중복되는 경우.
  2. 모델을 변경했지만, 마이그레이션에는 변경사항이 없으면서 데이터베이스에도 반영되지 않아서 발생하는 경우.

형태

  • 대표적으로 no such column 오류. 바뀐 모델에서 컬럼을 추가했는데 마이그레이션에 반영이 안되는 등의 이유로 발생한다.
  • 그 외 dependency 설정 오류 등 다양한 오류명으로 발생한다.

해결 방법

1. 데이터베이스를 드랍하지 못할 때 주석을 이용하는 방법

  • migration폴더 안에 있는 .py파일들 중 __init__.py부분을 제외한 나머지 파일들 중에서 문제가 되는 모델이 있는 코드들을 주석처리해준다.
  • 그 뒤 makemigrations, migrate 순서대로 진행하면 갱신이 완료된다.
  • 혹시 잘 안된다 싶으면 python manage.py makemigrations myapp 이런식으로 앱 이름을 뒤에 추가하면 해당 앱에 있는 모델부터 마이그레이션이 진행된다.

2. 데이터베이스 드랍해도 상관없다면

  • migration폴더 안에 있는 .py파일들 중 __init__.py부분을 제외한 나머지 파일들을 삭제한다.
  • sqlite를 사용한다면 db.sqlite3 파일을 삭제한다.
  • MySQL이나 PostgreSQL 등 다른 데이터베이스를 사용한다면 연결된 데이터베이스의 테이블 전체를 드롭한다.
  • 다시 마이그레이션을 진행한다.

3. 그래도 이상하다.. dependency를 설정하라는 등 이상한 오류가 끊임없이 발생한다

  • 데이터베이스에 연결하는 사용자의 권한이 전부 주어졌는지 확인한다(2022.07.11 통한의 추가).
  • MySQL 권한 전체 부여 쿼리인
grant all privileges on {db이름}.* to '{사용자명}'@'%'; # django migration 진행할 때 무조건 설정해주어야 한다.

4. 이러한 충돌 예방법

  • .gitignore에 migrations/ 를 추가한다. 마이그레이션 파일이 깃허브에 올라가지 않도록 하여 중복된 파일을 예방할 수 있다.

최초 생성 일자: 2021-07-02
갱신 일자: 2022-07-12

728x90
반응형