サイトアイコン ITC Media

DjangoアプリでPostgreSQLを使う|設定方法の解説

(最終更新月:2022年1月)

✔Djangoを使っているこんな方へ向けての記事となります

「Djangoで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

という行を探します(結構下の方)

見つかりましたら、peermd5へ変更します

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';

djangouserdjangopasswordはそれぞれ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を使用しているユーザーに向けた特別なモデルフィールドが用意されています

https://docs.djangoproject.com/ja/3.2/ref/contrib/postgres/fields

特にフィールドにリストを保存できる「ArrayField」などは使える場面も多いはず!

どれを使っているわけでもなく、こだわりがない方はポスグレをオススメします

ArrayFieldについてはこちらの記事でも少し触れています

ポスグレをUbuntu環境にインストール・設定する方法

[ad]

そもそも、「ポスグレがインストールされていない!」という方はこちらからどうぞ!

パッケージのインストール

$ sudo apt update && sudo apt upgrade
$ sudo apt install libpq-dev postgresql postgresql-contrib

まずはアップデート

その後に必要な3つのパッケージをインストールしましょう!

  1. libpq-dev
  2. postgresql
  3. postgresql-contrib

postgresユーザーのパスワード設定

インストールが完了すると「postgres」という新しいユーザーが作成されています

今後データベースへアクセスするためにパスワードなどを設定しておきましょう

$ sudo passwd postgres

パスワードを2回入力して設定完了です

まとめ

当記事では、DjangoアプリでPostgreSQLデータベースを使うための設定方法を解説しました

まとめると、

PostgreSQL側で、

が必要で、Django側では、

が必要になります

うまくご活用頂ければ幸いです

モバイルバージョンを終了