
目次
はじめに
これまで MySQL で構築していた Django アプリケーションのデータベースを PostgreSQL に変更した際の作業の記録です。この手の作業は時間が経つと忘れてしまうので、自分自身の備忘録でもあります。
ドライバのインストール
PostgreSQL のドライバ psycopg2 をインストールします。
$ pip install psycopg2-binary
データベースの準備
次にデータベースを準備します。ここでは PostgreSQL のインストールは済んでいるものとします。 (インストールは PostgreSQL のインストール [Linux MInt 19] を参照してください。) また、下記パラメータを使用するものとします。
データベース作成権限のあるユーザ: pguser
データベースパラメータ:
- データベース名: dbname
- DBユーザ名: dbduser
- パスワード: password
まず psql を起動します。
$ psql -U pguser
続いて psql 内で下記設定を行います。(# は psql のプロンプトです。)
# CREATE DATABASE dbname; # CREATE USER dbduser CREATEDB PASSWORD 'password'; # ALTER ROLE dbduser SET client_encoding TO 'utf8'; # ALTER ROLE dbduser SET default_transaction_isolation TO 'read committed'; # ALTER ROLE dbduser SET timezone TO 'UTC'; # GRANT ALL PRIVILEGES ON DATABASE dbname TO dbduser; # \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+----------- pguser | Superuser | {} postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} dbuser | Create DB | {}
3 〜 5行目 (ALTER 文) は Django の推奨設定に従いました。
作成するユーザ権限については、テストDBを作成できるよう CREATEDB 権限を付与しています。
settings.py の設定
settings.py の DATABASES パラメータを修正します。 Engine 以外は、MySQL と変わらないと思います。
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'HOST': 'localhost', 'PORT': '', 'NAME': 'dbname', 'USER': 'dbduser', 'PASSWORD': 'password', } }
データベースのマイグレーション
settings.py を正しく修正できれば、マイグレーションによってデータベース内にテーブルを作成できます。
$ python manage.py makemigrations appname $ python manage.py migrate
MySQL からデータを移行する場合は、Django でデータをダンプ/ロードする を参照してください。