Djangoでアプリ開発をしていると、いつか一般公開したくなる時がきます。
そんな時ぶち当たるのがデータベースの壁!
PostgreSQLは無料で使えるデータベースなので、今のうちにローカルで使い慣れておきましょう!
Djangoのプロジェクトで、PostgreSQLを使うには予めPostgreSQL内にデータベースを作っておく必要があります。
Homebrew
homebrewを使ってPostgreSQLをインストールするので入ってない場合は入れておきます。
$ $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
インストールできるPostgreSQL
$ brew search postgresql
==> Formulae
postgresql@10 postgresql@13 postgresql@9.5 postgrest
postgresql@11 postgresql@14 ✔ postgresql@9.6
postgresql@12 postgresql@9.4 qt-postgresql
==> Casks
navicat-for-postgresql
上記の場合、バージョン14がインストールされています。
インストールと確認
インストールされていなければインストールしましょう。
バージョンを指定しなければ最新のバージョンがインストールされます。
$ brew install postgresql
$ psql --version
psql (PostgreSQL) 14.5 (Homebrew)
起動と確認
$ brew services start postgresql
==> Successfully started `postgresql`
$ brew services list
Name Status User File
postgresql@14 started User ~/Library/LaunchAgents/homebrew.mxcl.postgresql@14.plist
Statusが「started」になっていれば起動できている。
$ brew postgresql-upgrade-database
データベース一覧を表示
$ psql -l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+----------+---------+-------+-------------------
postgres | User | UTF8 | C | C |
template0 | User | UTF8 | C | C | =c/User +
| | | | | User=CTc/User
template1 | User | UTF8 | C | C | User=CTc/User +
| | | | | =c/User
デフォルトでは、上記のようなデータベースのリストが表示されたはずです。
データベースに入る
$ psql postgres
postgres=#
先頭が「データベース名#」になります。
ユーザー一覧
ローカル環境の場合、Macで設定している名前のロールがスーパーユーザーとして自動で設定されます。
本番環境では、postgresのロールがスーパーユーザーとして自動で作成されます。
バックスラッシュは「¥」 で入力できます。
postgres=# \du
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
YOURNAME | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
パスワード設定
自動で作成されたYOURNAMEのロールにはパスワードが設定されないので設定しておく。
postgres=# \password
Enter new password for user "YOURNAME":
新しくデータベースを作成
データベースはプロジェクト毎に用意しなければならないので、データベース名はプロジェクト名などにすると分かりやすいかもしれません。「database_name」の部分をデータベース名にしてください。
postgres=# CREATE DATABASE database_name;
新規ユーザー
Djangoから接続するため、新たなユーザーとパスワードを設定します。
ユーザー作成
「new_user」「password」を自身のものに書き換えて下さい。
本番環境も同じ名前にすると良いので覚えておいて下さい。
postgres=# CREATE USER new_user WITH PASSWORD 'password';
作成できたか確認
postgres=# \du
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
YourName | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
new_user | | {}
データベースから出る
postgres=# \q
Djangoで設定
settings.pyのDATABASEを変更します。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
# データベースの名前(defaultは空)
'NAME': 'database_name',
# データベースに接続するユーザー(defaultは空)
'USER': 'new_user',
# データベースへの接続時に使用するパスワード
'PASSWORD': 'password',
# データベースへの接続時に使用するホスト。空の文字列はlocalhost
'HOST': '',
# データベースへの接続時に使用するポート。空の文字列はデフォルトのポート
# 空でもOK
'PORT': '',
}
}
PostgreSQLの接続について
DjangoはPostgreSQL 11以降をサポートしています。psycopg2 2.8.4 以降が必要です
Django公式 – PostgreSQLに関する注意事項
HOSTについて
PostgreSQLを使用している場合、デフォルト(空のHOST)では、データベースへの接続は「UNIXドメインソケット」(pg_hba.conf)を介して行われます。UNIXドメインソケットが標準の場所にない場合は、postgresql.confのunix_socket_directoryfromと同じ値を使用します。TCP ソケット経由で接続する場合は、HOSTを「localhost」または「127.0.0.1」に設定します (pg_hba.conf)
Django公式ドキュメント
コマンドまとめ
Brewコマンド
起動 | $ brew services start postgresql |
終了 | $ brew services stop postgresql |
再起動 | $ brew services restart postgresql |
DBMS一覧と状態 | $ brew services list |
psqlコマンド
データベース一覧 | $ psql -l |
データベースに入る | $ psql データベース名 |
SQLコマンド
データベースを出る | postgres=# \q |
データベース作成 | postgres=# create database データベース名; |
データベース削除 | postgres=# drop database データベース名; |
ユーザー一覧 | postgres=# \du |