はじめに
次に移る前にデータベースをSQLiteからPostgreSQLへ移行しました。
SmartMemoは、Markdownや数式、Pythonコードの実行などに対応したメモアプリです。
今回は、今後の公開も見据えて、データベースをSQLiteからPostgreSQLへ変更しました。
PostgreSQLを導入
まず、PostgreSQL 18をインストールし、PostgreSQLのDBを作成し、Djangoから接続できるように設定しました。
DjangoのDB設定の変更
これまでSQLiteを使用していましたが、本格的にアプリを作りたいと思いがあったので、サーバー設定やアクセス権限管理など高度な管理が可能なPostgreSQLへ変更してみました。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'smartmemo',
'USER': 'postgres',
'PASSWORD': config('POSTGRES_PASSWORD'),
'HOST': 'localhost', 'PORT': '5432',
}
}
パスワードなどは.envから読み込むようにしています。
SQLiteからデータを移行
QLiteからデータを移行
既存のSQLiteデータをDjangoのdumpdataで書き出し、PostgreSQLへloaddataで読み込みました。
python -X utf8 manage.py dumpdata --indent 2 --output data.json --exclude contenttypes --exclude auth.permission
その後、PostgreSQL側へデータを読み込みました。
途中、Profileを自動作成するpost_saveシグナルがfixtureの読み込み時にも動作し、データの重複エラーが発生しました。
一時的にシグナルを無効にしてデータを移行し、移行後に元へ戻しました。
移行後の確認
PostgreSQLへデータが正常に移行されたことを確認し、実際にSmartMemoへログインできるか確認しました。
既存ユーザーのデータも確認でき、SQLiteからPostgreSQLへの移行が完了しました。
セキュリティ設定も見直し
データベース移行と合わせて、SECRET_KEYとDEBUGも環境変数から読み込むように変更しました。
SECRET_KEY = config('SECRET_KEY')
DEBUG = config('DEBUG', default=True, cast=bool)
SECRET_KEYなどの情報は.envに保存し、.gitignoreでGit管理の対象外にしています。
また、python manage.py check --deployを実行して、Djangoのセキュリティチェックも行いました。
ローカル開発環境のため、HTTPS関連などの警告は本番公開時に対応する予定です。
おわりに
今回は、SmartMemoのデータベースをSQLiteからPostgreSQLへ移行しました。
個人開発でのデータベース移行は初めてだったため、途中でシグナル関連のエラーなどもありましたが、実際にデータを移行してログインまで確認することができました。
今後は、ユーザー入力やファイルアップロード、認証・認可などのセキュリティ面についても確認していく予定です。
SmartMemoの完成に向けて、少しずつ改善していきます。