DjangoでPostgreSQL13を使用する方法(CentOS8 Stream)

Djangoのデータベース設定をデフォルトの sqlite3 から PosgreSQL13 に変更します。

まずは環境から。

Pythonのバージョン

$ python --version
Python 3.8.12

Djangoのバージョン

$ python
>>> import django
>>> django.VERSION
(3, 2, 8, 'final', 0)

Djangoの構成は下記の通りです。

$ mkdir /example
$ cd /example
$ django-admin startproject mysite
$ cd mysite
$ python manage.py startapp myapp

仮想環境(/example/venv)を有効化した状態で、 psycopg2 をインストールします。

$ source /example/venv/bin/activate

psycopg2 をpipインストールをするとエラーになるため、psycopg2-binaryに変更したところインストールは成功したのですが、接続時に「AssertionError: database connection isn’t set to UTC」というエラーが出ました。こちらについては、psycopg2をインストールする際に、バージョンを2.8.5にすることで解消できました。

psycopg2-binaryをバージョン指定でインストールするには=2.8.5を付けます。

(venv)$ pip install psycopg2-binary==2.8.5

Django の setting.py(/example/mysite/mysite/setting.py)の DATABASES をコメントに変更して、下記の設定を入れます。

#DATABASES = {
#    'default': {
#        'ENGINE': 'django.db.backends.sqlite3',
#        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#    }
#}

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': '<db_name>',
        'USER': '<db_username>',
        'PASSWORD': '<db_password>',
        'HOST': '<db_hostname_or_ip>',
        'PORT': '<db_port>'
    }
}

setting.py の変更後に migrate することで、PostgreSQLに必要なテーブル等が作成されます。

$ python manage.py makemigrations
$ python manage.py migrate