윈도우 운영체제를 사용하기에 공식사이트에서 최신 버전인 13버전의 윈도우용 .exe파일을 설치하였다.
Download -> Windows -> Download the installer -> Download
이때 Visual C++이 없을 경우 DB 서버 실행 시 에러가 나기 때문에 Visual C++을 깔아주어야 한다.
관련 에러 : Install fails with getlocales.exe child killed error
실행 파일을 실행시킨 후 설정 값을 주어진대로 실행 시키면 Postgresql 설치가 완료된다. 설치 시 암호를 입력하는 부분이 있는데, 이 암호를 기반으로 psql을 실행하기 때문에 기억해야 한다.
Postgresql을 설치하면 psql
쉘 프롬프트가 설치된다. psql을 검색하여 실행한다.
사용자의 암호 부분에는 postgres를 설치할 때 설정한 암호를 입력하면 된다.
이후 Django 프로젝트에서 사용할 DB를 생성한다.
CREATE DATABASE 데이터베이스명;
\ㅣ
명령어를 사용해서 데이터베이스가 잘 생성되었는지 확인할 수 있다.
생성한 데이터베이스로 접근한다.
\C 데이터베이스명;
접근하면 쉘의 앞부분이 데이터베이스명-#
으로 변한다.
이후 새로운 유저를 만든 후 설정을 생성하고 권한을 부여하는 작업을 진행한다.
create user 유저명 with password '패스워드';
alter role 유저명 set client_encoing to 'utf-8';
alter role 유저명 set timezone to 'Asia/Seoul';
grant all privileges on database 데이터베이스명 to 유저명
여기까지가 데이터베이스에 대한 설정이다. 유저에게 데이터베이스에 대한 권한을 부여해야 Django에서 DB를 다룰 때 권한을 인정받게 된다.
우선 python과 PostgreSQL을 연동하기 위해서는 psycopg2
를 설치해야 한다.
pip install psycopg2
Django의 기본 DB는 sqlite3이기 때문에 해당 설정을 PostgreSQL로 바꾸기 위해 settings.py
의 Database설정을 바꿔준다.
#settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': '데이터베이스명',
'USER': '유저명',
'PASSWORD': '유저 생성시 사용한 패스워드',
'HOST': 'localhost',
'PORT': '',
}
}
이 후 Django model 작성은 일반적인 Django ORM 방법을 그대로 사용하면 된다.
모델을 작성한 후 migrate를 위해 다음과 같은 명령어를 입력한다.
python manage.py makemigrations
python manage.py migrate
이 후 psql에서 \dt
명령어를 통해 테이블 리스트를 확인해보면 다음과 같은 결과가 나온다.
생성한 모델이 잘 올라감을 확인할 수 있다.
error "account_user" 이름의 릴레이션(relation)이 없습니다 LINE 1: ...user"."date_joined", "account_user"."map_id" FROM "account_u...
데이터베이스로 sqlite3를 사용할 때에는 기존의 migrate 로그들로 인해 생기는 위와같은 에러를 해결하기 위해 migrate 폴더를 삭제하고 sqlite3를 삭제한 후 다시 makemigrations와 migrate를 진행하는 방식을 사용하였다.
PostgreSQL에서는 세션을 종료시킨 후 데이터베이스를 드랍하면 된다.
😉[데이터베이스 DROP]
psql에 접속한 후 내가 삭제할 데이터베이스가 아닌 데이터베이스에 접근한다.
\c postgres
테이블을 Drop하는 기본 명령어는 drop database 데이터베이스명;
이다. 하지만 이때 데이터베이스를 사용하는 세션이 존재하기 때문에 drop이 되지 않는 경우가 생길 수 있다.
이 때는 다음 명령어를 사용해서 세션을 강제 종료할 수 있다. (어차피 drop해버릴 db이기 때문에..)
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = '데이터프레임명';
이후에 drop database 데이터베이스명;
명령어를 입력하면 DB가 drop된다. \l
명령어를 통해 확인하면 DB가 DROP된 것을 확인할 수 있다.
[추가적으로 pgAdmin4 다루기]
pgAdmin4의 왼쪽 트리를 보았을 때 Tables 하위에 django_migrations 테이블이 있는 것을 확인할 수 있다.
해당 버튼을 누르면 아래와 같이 sql 문을 작성할 수 있는 칸이 나온다.
해당 명령어를 치면 django_migrations 폴더 하위의 데이터들이 삭제된다.
모델을 작성하다보니 왜 GeoDjango를 쓰는지 알 것 같았다.
간단하게 from django.contrib.gis.db import models
후 point
필드를 사용하여 쉽게 위도, 경도 값을 저장할 수 있다.
django FloatField
python에서 float 인스턴스로 표현된 부동 소수점 숫자.
이 필드의 기본 폼 위젯은 localize가 False일 때 NumberInput이고 그 외는 TextInput이다.