나중에 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
django
의 settings.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
Ghost