728x90
반응형
Django에서 제법 잘 발생하는 마이그레이션 충돌.
원인
- GitHub 등에 파일을 공유하면서 다른 사용자의 마이그레이션 파일을 내 컴퓨터에 받아오는 등 마이그레이션 파일이 중복되는 경우.
- 모델을 변경했지만, 마이그레이션에는 변경사항이 없으면서 데이터베이스에도 반영되지 않아서 발생하는 경우.
형태
- 대표적으로 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
반응형
'Computer Science > Troubleshooting' 카테고리의 다른 글
[Django, MySQL] Migration은 성공했지만 table이 없다. (0) | 2022.08.24 |
---|---|
[MySQL] MySQL ERROR 1045 (0) | 2022.08.23 |
[Docker] pull access denied (0) | 2022.08.17 |
[Docker] pull permission denied (0) | 2022.08.17 |
[Docker] 도커 이미지/볼륨/네트워크 삭제하기 (0) | 2022.08.16 |