LoginSignup
2
0

【Django x Postgre】エラー「ProgrammingError: invalid connection option "init_command"」とは?

Posted at

エラー概要

DjangoでPostgreSQLをローカル環境にDB構築中、以下のエラーが出てきました。
"init_command"とは??

invalid connection option "init_command"

こちらのエラーの原因と解決方法を紹介します。

原因

原因は、settings.pyに不要な一文があったためでした。
元々MySQLのDatabase設定を行なっていたsettings.pyDATABASESをコピーして、'ENGINE''django.db.backends.postgresql_psycopg2'に書き換えていたのですが、その際に一緒にinit_commandも消しておく必要がありました。

settings.py
DATABASES = {
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': BASE_DIR / 'db.sqlite3',
    # }
    'default': {
        # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': DATABASE,
        'USER': USER,
        'PASSWORD': PASSWORD,
        'HOST': HOST,
        'PORT': '5432'
        # このオプションはコメントアウトする
        # 'OPTIONS': {
        #     'init_command':
        #         'SET character_set_connection=utf8,collation_connection=utf8_unicode_ci'
        # }
    },
}

このinit_commandというオプションはMySQLのPythonドライバであるmysqlclientPyMySQLでは使用されますが、PostgreSQLのPythonドライバであるpsycopgではサポートされていないのです。

以下のstackoverflowでも同じエラーの方がいました。
Django installation picking up wrong path names for migrate after project was copied

init_commandはとは?

init_commandは、Djangoのデータベース接続の初期化時に実行されるSQLコマンドを指定するための設定。

上記のコメントアウトされたinit_commandの場合、接続が確立されたときにUTF-8の文字セットとUTF-8の照合順序を設定するSQLコマンドが指定されています。

また、psycopg2で実施した場合のエラーは以下でしたが、

django.db.utils.ProgrammingError: invalid dsn: invalid connection option "init_command"

psycopgに設定して実施した場合は、以下のエラーメッセージでした。

psycopg.ProgrammingError: invalid connection option "init_command"

補足1:

Mysqlでデータベースの文字セット(character set)や照合順序(collation)を調べる場合は以下のSQL。

SHOW VARIABLES LIKE 'character_set_database';
SHOW VARIABLES LIKE 'collation_database';

Postgresの場合は以下で可能です。

SELECT datname, pg_encoding_to_char(encoding) AS character_set, datcollate
FROM pg_database
WHERE datname = 'myproject_db';

補足2:

大前提、psycopg2(もしくはpsycopg)のインストールは必要です。

pip install psycopg2

インストールしていない場合、以下のエラーが出てきます。

raise ImproperlyConfigured("Error loading psycopg2 or psycopg module")
django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 or psycopg module

psycopgとは、PythonからPostgreSQLデータベースにアクセスするためのドライバのことです。

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0