“장고 postgreSQL 에러”로 인한 트러블슈팅 과정을 몇개 정리해보았습니다.
장고 postgreSQL 에러 1. 모델에 맞게 테이블이 변경이 안되는 경우
장고에서 모델을 변경해주고 makemigrations, migrate를 진행했는데도 PostgreSQL의 테이블에 변경 상황이 반영이 안되는 경우가 존재합니다.
이 경우, 우선 각 app의 migration 디렉토리에 migration 파일들을 삭제 해준 다음에 makemigrations와 migrate를 해주는데요.
이러면 Sqlite3의 경우 웬만하면 문제가 해결 되었습니다.
하지만 PostgreSQL의 경우, 위의 방법으로도 해결이 안되는 경우가 있습니다.
이럴 경우 아래와 같이 처치합니다.
해결 방안
- psql를 실행해서 db 계정에 접속합니다.
- 아래 쿼리문을 입력 합니다.
\c 데이터베이스명
DROP SCHEMA PUBLIC cascade;
CREATE SCHEMA public;
schema는 테이블, 뷰, 함수, 객체 등을 포함하는 논리적 컨테이너 인데요. 이 컨테이너 때문에 장고 모델 변경이 제대로 작동이 안되는 것 같습니다…
모든 DB에는 public 이라는 기본적인 스키마가 있기 때문에 이것을 삭제해주고 다시 생성해주면 장고 모델의 변경 사항이 제대로 반영됨을 볼 수 있습니다.
장고 postgreSQL 에러 2. relation does not exist 관련 에러
ProgrammingError at /khis/consultations/procedure-record/
relation "procedure_procedure" does not exist
LINE 1: INSERT INTO "procedure_procedure" ("procedure_code", "proced...
위와 유사한 에러는 실제 테이블의 연관 관계에서 생기는 의존성 때문에 발생하는 것 같습니다.
해결 방안
relation error 난 모델을 먼저 migration 하여 해당 문제를 해결 할 수 있습니다.
python manage.py makemigrations,
python manage.py makemigrations procedure # 의존성이 발생한 테이블 부터 makemigration