postgresql은 오픈소스 데이터베이스다.
postgresql 설치
$ sudo apt-get install postgresql postgresql-contrib
우선 postgres user로 접속한다음에 psql 클라이언트를 실행한다.
$ sudo -i -u postgres psql
psql 클라이언트의 prompt로 접속했으면 DB와 유저를 생성한다. ${user}, ${password}, ${db_name}은 원하는 값으로 설정해준다.
postgres# CREATE USER ${user} PASSWORD '${password}';
postgres# CREATE DATABASE ${db_name} ENCODING 'utf-8';
postgres# ALTER DATABASE ${db_name} OWNER TO ${user};
pytest가 잘 동작하지 않으면
postgres# ALTER USER {user} CREATEDB;
sql을 수행해본다.
django에 postgresql 연동하기(with dotenv)
postgresql 접속정보는 dotenv로 관리할 것이다. dotenv는 Django가 실행될때 환경변수 파일에 대한 설정값이 들어있는 파일을 읽어 OS에 등록해주는 역할을 수행한다.
postgresql접속을 위한 client도 설치해준다.
$ sudo apt-get install python-dotenv psycopg2
BASE_DIR(manage.py가 있는 위치)에 아래와 같은 내용의 .env파일을 생성한다. ${user}, ${password}, ${db_name}은 postgresql에서 생성한 값으로 설정해준다. test를 하는 경우 test용 db를 따로 만들어서 관리하는게 좋다. ${host}는 postgresql이 위치한 주소를 입력해준다. local에 설치한경우 localhost를 지정하면 된다.
# .env 파일
DB_USER=${user}
DB_PASSWORD=${password}
DB_NAME=${db_name}
DB_TEST=${test_db_name}
DB_HOST=${host}
setting.py의 DATABASES 변수에 postgresql server정보를 입력한다. 기존 sqlite에 대한 내용은 삭제한다.
from dotenv import load_dotenv
load_dotenv(dotenv_path=os.path.join(BASE_DIR, '.env'), encoding='utf-8')
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.getenv('DB_NAME', ''),
'USER': os.getenv('DB_USER', ''),
'PASSWORD': os.getenv('DB_PASSWORD', ''),
'HOST': os.getenv('DB_HOST', ''),
'PORT': '5432',
'TEST': {
'NAME': os.getenv('DB_TEST', ''),
},
}
}
DB에 migrations해본다.
$ python manage.py makemigrations
$ python manage.py migrate