(最終更新月:2022年1月)
✔Djangoを使っているこんな方へ向けての記事となります
「DjangoでPostgreSQLの設定方法が知りたい!」
「少し面倒くさそう、、PostgreSQLでどんなメリットがあるの?」
「そもそも新しいサーバーでポスグレがインストールされていない」
✔当記事を通じてお伝えすること
- DjangoアプリでPostgreSQLを使うための設定方法を解説します
- 「PostgreSQLにはどんなメリットがあるの?」を紐解きます
- PostgreSQLがそもそもインストールされていないという方に準備方法をお伝えします
以下の記述では、PostgreSQLを略称「ポスグレ」と呼んで解説を進めていきます
DjangoアプリでPostgreSQLを使う|設定方法の解説
PostgreSQL側の設定変更
ポスグレがインストールできている方へDjangoで使用するための設定変更を解説します
ポスグレ自体インストールしていない方はまず3章をご覧になってから戻ってくることをオススメします
psqlユーザーのパスワードを設定
ポスグレのメインユーザー「postgres」にパスワードを設定します
postgres=# ALTER ROLE postgres WITH PASSWORD 'postgres';
ここではパスワードを「postgres」としてますが、お好きなものにして構いません
postgreSQLをパスワード認証へ変更する
現在はpeer認証という、OSのユーザーとpostgreSQLユーザーが一致している場合のみアクセスできる、認証方法になっています
Djangoでアクセスしていくためにも、パスワードによる認証へ変更します
/etc/postgresql/13/main/pg_hba.conf
※13はバージョンになりますので、ご自身のバージョンにより異なります
$ cd /etc/postgresql/13/main $ sudo nano pg_hba.conf
ファイル内で
local all postgres peer local all all peer
という行を探します(結構下の方)
見つかりましたら、peerをmd5へ変更します
local all postgres md5 local all all md5
ポスグレのリスタート
$ sudo /etc/init.d/postgresql restart
アクセスできるか確認します
$ psql -U postgres -d postgres
パスワードを入力して、中へ入れればOKです
Djangoプロジェクト用のユーザー作成と設定
[ad]
Djangoプロジェクトでデータベースアクセスをするユーザーを作成、設定します
データーベースへアクセスして、まずはユーザーを作成しましょう
CREATE USER djangouser WITH PASSWORD 'djangopassword';
djangouser、djangopasswordはそれぞれDjangoプロジェクトで使用するユーザー名、パスワードになりますのでお好きな文字列を入力してください!
ユーザーの設定を以下の通り変更します
ALTER ROLE djangouser SET CLIENT_ENCODING TO 'utf8';
ALTER ROLE djangouser SET DEFAULT_TRANSACTION_ISOLATION TO 'read committed';
ALTER ROLE djangouser SET TIMEZONE TO 'Asia/Tokyo';
細かい説明は省きますが、文字コードや時間帯の設定になります
Djangoプロジェクトで使うデータベースを作成
CREATE DATABASE mydatabase;
「mydatabase」の部分をお好きなデータベース名にして下さい
データベースとユーザーを紐付ける
作成したデータベースへのアクセス、編集権限をDjangoユーザーに与えます
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO djangouser;
アクセスできるか確かめよう!
\q
で一度postgreSQLからログアウトします
先程作成したユーザー、データベースへアクセスします
psql -U djangouser -d mydatabase
パスワードを入力してログインできれば成功です!
Djangoの設定を書き換える
[ad]
ポスグレ側の設定が終わりましたら、Djangoでの設定に移ります
pipでpsycopg2のインストール
DjangoでpostgreSQLを扱うのに必要なパッケージをインストールします
$ pip install psycopg2-binary
virtualenv(仮想環境)をアクティベートすることを忘れずに!!
settings.pyの書き換え
データベース設定の箇所を下記の通り書き換えましょう
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } }
を、下記へ変更します
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'mydatabase', 'USER': 'djangouser', 'PASSWORD': 'djangopassword', 'HOST': 'localhost', 'PORT': '5432', } }
行の最初に「#」を入れて無効化することで、
元の記述を念の為取っておくこともできます!
データベース名、ユーザー名、パスワードはご自身の設定したものに変更しましょう
データベースのマイグレーション
$ python manage.py makemigrations $ python manage.py migrate
エラーが出なければOK!
スーパーユーザーの作成
データベースが一度リセットされています
スーパーユーザーを作成しましょう
$ python manage.py createsueruser
PostgreSQLはなぜオススメ?
ご存知の方もいらっしゃると思いますが、DjagnoにはpostgreSQLを使用しているユーザーに向けた特別なモデルフィールドが用意されています
特にフィールドにリストを保存できる「ArrayField」などは使える場面も多いはず!
どれを使っているわけでもなく、こだわりがない方はポスグレをオススメします
ArrayFieldについてはこちらの記事でも少し触れています
ポスグレをUbuntu環境にインストール・設定する方法
[ad]
そもそも、「ポスグレがインストールされていない!」という方はこちらからどうぞ!
パッケージのインストール
$ sudo apt update && sudo apt upgrade $ sudo apt install libpq-dev postgresql postgresql-contrib
まずはアップデート
その後に必要な3つのパッケージをインストールしましょう!
- libpq-dev
- postgresql
- postgresql-contrib
postgresユーザーのパスワード設定
インストールが完了すると「postgres」という新しいユーザーが作成されています
今後データベースへアクセスするためにパスワードなどを設定しておきましょう
$ sudo passwd postgres
パスワードを2回入力して設定完了です
まとめ
当記事では、DjangoアプリでPostgreSQLデータベースを使うための設定方法を解説しました
まとめると、
PostgreSQL側で、
- ユーザーのログイン周りの設定
- データベースの作成と設定
が必要で、Django側では、
- ライブラリのインストール
- settings.pyの書き換え
- スーパーユーザーの作成
が必要になります
うまくご活用頂ければ幸いです