Python WEBサービス

【DRF】venv仮想環境を用いて、DRFシステムで書籍管理システムを作成する(7)データベースをPostgreSQLに変更する

ここまで来ておいてなんなんですが、SQLiteを使用しているとデータベースがロックされてどうにもならない事が起きてしまい、どうしたものかと思案していたのですが、「やはりここはDBそのものを変えてしまえ!」と囁かれたので、突然ですが、使用するデータベースを変更したいと思います。

15.データベースをPostgreSQLに変更する

15-1.Ubuntuのパッケージを更新

最初に、Ubuntuのパッケージリストを最新に更新します。

15-2.PostgreSQLのインストール

次に、PostgreSQLをインストールします。
PostgreSQLの最新版は、postgresql パッケージからインストール可能です。

15-3.PostgreSQLサービスの起動

インストールが完了したら、PostgreSQLサービスを起動します。

15-4. PostgreSQLサービスの状態確認

サービスが正常に起動しているか確認します。

12/main (port 5432): online の様に表示されれば、PostgreSQLは正しく動作しています。

15-5.PostgreSQLユーザーへの切り替え

デフォルトでは、PostgreSQLは postgres というスーパーユーザーアカウントを作成します。このユーザーに切り替えます。

15-6. PostgreSQLシェル(psql)の起動

これでPostgreSQLのコマンドラインインターフェースが開きます。
データベース管理やSQLクエリを実行できます。

15-7. デフォルトのPostgreSQLユーザーのパスワード設定

PostgreSQLシェルに入ったら postgres ユーザーのパスワードを設定しておくと便利です。

これで、新しいパスワードを入力して設定します。

15-8. データベースとユーザーの作成

開発に使用するデータベースを作成します。
今回の場合は書籍管理システムなので、データベース名は「book_management_system」とします。

1) データベースの作成

2) ユーザの作成と各種設定

3) ユーザーにデータベースへのアクセス権を付与

15-9.PostgreSQLの終了

作業が終わったら psql を終了します。

postgres ユーザーからもログアウトするには以下を入力します。

15-10. psycopg2 のインストール

psycopg2は、PythonからPostgreSQLデータベースに接続して操作するためのライブラリです。

1) PostgreSQLの開発用パッケージをインストール

2) psycopg2 をインストール

15-11. Djangoのsettings.pyでデータベース設定する

config/settings.py を編集して、PostgreSQLをデータベースエンジンとして指定します。

15-12. マイグレーションの実行

遥か前になってしまいましたが、項番2-2 で行った「マイグレーション」をここで再度行います。

なぜかマイグレーションに失敗したので対策します。

仮想環境が正しくアクティブになっているかを確認

psycopg2のバージョンが最新であることを確認するために、以下のコマンドを実行

マイグレーション実行

どうやら成功したようです。

15-13. スーパーユーザーの作成

項番3-1で行った、管理者としてDjango管理サイトにアクセスできるスーパーユーザーを作成します。

ユーザー名、メールアドレス、パスワードを入力します。
パスワードは最低8文字が必要です。
また入力時にパスワードは表示されない(見えない)ので、間違えずに入力して下さい。コピペ推奨。

15-14.データベース構築

項番4-2で行ったモデルファイルからデータベースの(テーブル)構築を行います。

行う前に、sqliteで作成されていたファイルを削除します。

モデルファイルが作成できたらデータベースの構築が必要になりますので、下記コマンド(makemigrations)を実行します。

ここでも引っかかったので、下記を実行します。
仮想環境を再作成

上記を実行した後、ようやく下記の makemigrations が実行できました。

続けて下記コマンド(migrate)を実行します。

マイグレーションした結果のファイルができが上がっています。
drf3/django/apps/book/migrations ディレクトリ内を確認。

「0001_initial.py」が、マイグレーション実行時に作成されるファイルです。
テーブル構造を変更するなどしてマイグレーションを実行するたびに、連番のファイルが次々と出来上がる仕組みとなっています。

マイグレーション状態の確認

すべて成功しているっぽいです。

15-15. 半自動起動の設定を行う

WSLが起動した際に、PostgreSQLが半分ぐらい自動起動するようにします。半分ってところがミソ(苦笑)

WSLでは、通常のLinuxのようにinit.dやsystemdが使えないため、手動でサービスを起動する必要があります。
ではどうするか?
WSLを起動するたびにPostgreSQLを自動で起動するスクリプトを作成できるので、新しいUbuntuのウィンドウを開いて以下の手順で作成します。

1) ホームディレクトリに移動

2) .bashrcファイルを編集

3) ファイルの最後に以下の行を追加

追記したら Esc + w + q で保存してviエディタを終了させます。

4) 設定を反映

次回WSLを起動したときに自動的にPostgreSQLが起動するようにするため、以下のコマンドで.bashrcを再読み込みします。

これでWSLを起動するたびにPostgreSQLが自動的に起動するようになります。
ただし、毎回 sudo のパスワード入力が求められる場合があるで、半自動と行った感じとなってしまうのが残念なところです。

15-16. A5:SQLから接続する

いろんな現場で使用されている、データベースクライアントつーるである「A5:SQL」から接続する設定を行います。
新しくターミナルを開き、下記コマンドで設定ファイルを vi エディタで開きます。

現在の pg_hba.conf の設定はローカル接続のみを許可しています。
外部からの接続を許可するには、以下のように変更することをお勧めします。

1. ローカル接続(Unix domain socket)はそのままにします。
2. IPv4とIPv6のローカル接続設定はそのままにします。
3. 外部からの接続を許可するために、新しい行を追加します。

この変更により、
1. 0.0.0.0/0は全てのIPv4アドレスからの接続を許可します。
2. md5はパスワード認証を使用することを意味します。

【注意点】
・この設定は全てのIPアドレスからの接続を許可するため、セキュリティリスクが増加します。実際の運用環境では、特定のIPアドレスやサブネットからの接続のみを許可するなど、より制限的な設定を検討してください。
・変更後、PostgreSQLサービスを再起動する必要があります

関連するポスト

【DRF】venv仮想環境を用いて、DRFシステムで書籍管理システムを作成する(1)Djangoのセットアップ

【DRF】venv仮想環境を用いて、DRFシステムで書籍管理システムを作成する(2)Djangoアプリケーションの作成

【DRF】venv仮想環境を用いて、DRFシステムで書籍管理システムを作成する(3)APIの動作とテスト

【DRF】venv仮想環境を用いて、DRFシステムで書籍管理システムを作成する(4)Vue.jsの導入

【DRF】venv仮想環境を用いて、DRFシステムで書籍管理システムを作成する(5)Vuetifyの導入

【DRF】venv仮想環境を用いて、DRFシステムで書籍管理システムを作成する(6)データの取得

-Python, WEBサービス
-, , , , ,