[Alembic] upgrade에 계속해서 table drop 발생

강버섯·2022년 1월 3일
1

FAST API⚡️

목록 보기
4/5

👉 발단

postgreSQL을 연결하고 alembic을 적용했는데 이상한 문제가 발생했다.
분명 table drop에 대한 코드를 작성한 적이 없는데 alembic revision을 실행시켰을 때 계속해서 downgrade에는 테이블 생성upgrade에는 테이블 삭제가 작성된다는 것.🥲
몇 번이고 코드를 살펴보고, 로그를 보는데도 이유를 찾을 수 없어서 너무 괴로웠던,,,,

👉 문제 발생 이유

예상했었던 이유는 데이터베이스 연결에 문제가 생겨서 생성되었다가 rollback이 일어나 테이블이 drop 되는 것이 아닐까하는 것이었다.
하지만 데이터베이스 연결에는 문제가 없었고, alembic을 적용할 때 이미 table이 생성된 상태였고, 작성된 코드 상에서 create_all을 통해 table 생성을 시도하고 있었기 때문에 alembic이 table이 존재해서는 안된다고 판단하여 upgrade 시 table drop을 수행하도록 작성된 것이었다.

alembic의 $> alembic revision --autogenerate를 수행하면,
1. 현재 데이터베이스의 모양
2. 작성된 코드가 실행할 것들
을 확인해서 revision 파일을 작성한다.

즉, alembic은 현재의 모습과 코드 실행의 결과를 비교하여 revision 파일을 생성하는 것이기 때문에 정확한 값이 revision 파일에 작성되지 않을 수 있다.
심지어 alembic이 생성한 revision 파일을 보면,
위와 같이 "조정해서 쓰세요!(please adjust!)" 라고 적혀있다.

alembic의 autogenerate를 무조건적으로 신뢰한다기보다는 데이터베이스의 버전 관리를 위해서 좀 더 편리하게 사용할 수 있는 도구 정도로 생각해서 활용하면 좋을 듯하다.

👉 해결

그래서 문제를 어떻게 해결했는가.
일단 downgrade()에 존재하는 코드들을 전부 pass로 변경하고, $> alembic downgrade base로 alembic을 적용하기 전의 상태로 바꿔주었다.
생성된 alembic 파일을 전부 삭제한 뒤, 테이블 생성을 위해 작성해두었던 create_all()를 존재하는 테이블에 연결하는 bind로 변경하여 다시 alembic을 실행하니 upgrade와 downgrade가 모두 pass로 뜨면서 원하던 결과값을 만들어주었다.

alembic을 적용하는 시기에 따라서 version 관리가 꼬일 수도 있으니 무턱대고 실행해서는 안될 듯하다.
alembic,,,,,절대 신뢰는 금물,,,🥲

profile
무럭무럭 버섯농장

0개의 댓글