Django : SQLite to PostgreSQL

나중에 DB 전환할때 해메지 않으려고 기록...


Install Postgres in Docker

docker-compose에 아래와 같이 postgresql 도커를 선언하자.

db:
  image: postgres
  restart: always
  volumes:
    - ./db/data:/var/lib/postgresql/data
  ports:
    - 5432:5432
  environment:
    POSTGRES_USER: "username"
    POSTGRES_PASSWORD: "password"
    POSTGRES_DB: "dbname"
    TZ: "Asia/Seoul"


Django Settings

djangosettings.py에서 DATABASES 부분 찾기

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

기본적으로 위와같이 선언되있다. 이미 SQLite에 데이터가 쌓여서 마이그레이션이 필요한 경우 아래 명령어로 dump.json에 데이터를 빼주자.

python manage.py dumpdata --natural-foreign --natural-primary -e contenttypes --indent=4 > dump.json

이제 위 postgresql 도커에 선언한 내용들로 채워준다.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'dbname',
        'USER': 'username',
        'PASSWORD': 'password',
        'HOST': 'db',
        'PORT': '5432',
    }
}

다만 필자의 경우 실행시 오류가 발생하여 장고 도커 이미지에 아래 패키지를 추가 설치하여 해결하였다.

sudo apt-get install -y python3-psycopg2

postgresql에 테이블 생성 및 어플리케이션 모델 동기화

python manage.py migrate
python manage.py migrate --run-syncdb

dump.json의 내용을 로드하려면 아래 명령어를 입력하자.

python manage.py loaddata dump.json


TODO:

  • 도커 컴포즈에서 시스템 변수를 적극 활용하는 방법 익혀야함
    • 지속적으로 유지 가능한 방법을 찾아야함
    • .bashrc에서 export한 변수는 못쓰는 건가?
  • 데이터 로드할때 max_length가 초과한 데이터가 있음을 확인, 발생한 원인 파악 및 선처리 필요
  • postgres로 테스트 진행시 백엔드 몇몇 구간에서 인코딩 오류가 발생하는 것을 확인, 해결방안 모색 필요

복붙용 코드

덤프

python manage.py dumpdata --natural-foreign --natural-primary -e contenttypes --indent=4 > dump.json

로드

python manage.py migrate && python manage.py migrate --run-syncdb && python manage.py loaddata dump.json

이 글이 도움이 되었나요?

신고하기
0분 전
작성된 댓글이 없습니다. 첫 댓글을 달아보세요!
    댓글을 작성하려면 로그인이 필요합니다.