미그레이션 오류

조호원·2020년 11월 29일
0

미그레이션 시

데이터 베이스를 새로 조정할 일이 생겨서 아예 미그레이션 파일을 전부 지우고 다시 "python manage.py db init" 명령어로 새로 미그레이션 파일을 생성한 뒤, 미그레이션을 적용했다. 그랬더니 아래와 같은 오류가 발생했다.

ERROR [root] Error: Cant't locate revision identified by 'e3ae40a303b9'

해결법

스택오버플로우에 검색해보니 내가 migration 폴더를 삭제했지만, 데이터베이스에 version 정보가 남아있기 때문에 이러한 오류가 생성된다고한다. 간단하게 database에 진입하여
delete from alembic_version;
위 명령어를 실행해주면 해결된다.

Cascade Depend

미그레이션까지는 성공하였으나 디비에 적용하려는 순간 또 오류가 떴다.(개발자의 숙명...) 오류는 아래와 같다.

sqlalchemy.exc.InternalError: (psycopg2.errors.DependentObjectsStillExist) cannot drop table server because other objects depend on it
DETAIL: constraint compressor_serverKey_fkey on table compressor depends on table server
constraint server_to_company_serverKey_fkey on table server_to_company depends on table server
HINT: Use DROP ... CASCADE to drop the dependent objects too.

해결법

간단히 요약하면 server 테이블이 compressors에 serverKey와 server_to_company에 serverKey와 의존성(외래키)이 존재하여 지울수 없다는 것이다. 고로 순서의 문제다. 의존성이 있는 것부터 차례대로 지워 올라가면 그만인 것. 이것도 쉘을 통해 접근한 뒤 삭제하는 것이 좋을것 같다. 지우고난 뒤 다시 데이터베이스에 적용시키면 당연하게도 오류와 마주친다.

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedTable) table "server" does not exist

테이블을 쉘을 통해 이미 지워버렸으니 이런 오류가 뜬 것이다. 마이그레이션 폴더를 지운뒤 다시 미그레이션을 수행하면 해결된다.

여러번 겪은 삽질에 이젠 저번보다 영어도 잘 읽히고 금방금방 문제점을 찾을 수 있었다. 점점 진정한 프로그래머의 길을 가는 듯하다.

profile
세상을 바꾸는 사람

0개의 댓글