이전 프로젝트에서는 mysql만 사용했어서 postgresql과는 어떻게 연동하는지 작성해보려 한다.
$ psql postgres
위 입력어를 통해 postgresql을 접속해준다
postgres=# create database [databasename];
입력하면 데이터베이스가 생성되었다고 터미널에 표시된다.
그후 데이터 베이스에 접속해준다.
postgres=# \connect [databasename];
새롭게 만든, 데이터베이스로 들어왔으면, 새로운 유저를 만들고 몇가지 설정과 함께 권한을 부여한다.
순서대로 아래의 명령어를 입력한다.
create user root with password 'password';
root는 유저 이름이고, password는 비밀번호이다. 이때 비밀번호는 따옴표로 감싸주어야 한다!!
alter role root set client_encoding to 'utf-8';
alter role root set timezone to 'Asia/Seoul';
grant all privileges on database [databasename] to root;
밑에는 내가 이번에 만드는 프로젝트에서 Postgresql과 연결해본 예시다.
postgres=# create database project;
CREATE DATABASE
postgres=# \connect project;
You are now connected to database "project" as user "User".
project=# create user root with password 'password';
CREATE ROLE
project=# alter role root set client_encoding to 'utf-8';
ALTER ROLE
project=# alter role root set timezone to 'Asia/Seoul';
ALTER ROLE
project=# grant all privileges on database project to root;
GRANT
데이터베이스 설정은 끝! 그다음은 장고 세팅으로 넘어가준다.
나중에 다른 데이터베이스 생성후 이미 생성된 유저에게 모든 권한을 부여해줄 때 코드이다.
postgres=# GRANT ALL PRIVILEGES ON DATABASE (DB_NAME) TO (USER_NAME);
먼저 psycopg2 라는 것을 설치해야 되는데, 터미널창에서 pip로 설치를 진행한다.
pip install psycopg2
이렇게 설치가 마무리 되었으면, 이제 postgreSQL을 적용할 django 프로젝트로 들어가서 settings.py 파일을 열어서 database항목을 찾아본다.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
원래는 위와 같이 작성되어있는 것을 Postgresql에 맞게 수정해준다.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'project',
'USER': 'root',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '',
}
}
그후에 터미널에 들어가서 아래와 같은 명령어들을 입력한 후에 서버가 잘 돌아가는지 확인한다.
python manage.py makemigrations
python manage.py migrate
python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
March 14, 2022 - 10:02:57
Django version 3.0.8, using settings 'project.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
이렇게 나오면 잘된거다!! 최종적으로 postgresql에 직접 들어가서 작성된 모델들이 테이블로 잘 생성되었는지 확인해주면 된다.
중간에 마이그레이션을 하다가 에러가 발생했는데 에러 코드는 이러했다.
AssertionError: database connection isn't set to UTC
구글링을 해보니 psycopg2와 장고의 버전문제라고 했다.
psycopg2버전을 다운그레이드하던가 아니면 장고 settings.py에 가서
USE_TZ = True를 삭제하면 에러를 해결할 수 있다.
에러 관련 스택오버플로우 링크이다.
https://stackoverflow.com/questions/68024060/assertionerror-database-connection-isnt-set-to-utc
진짜 끝~!!