PostgreSQLエラー「createdb: データベースの生成に失敗しました: ERROR: 符号化方式 EUC_JP がロケール ja_JP.UTF-8 に合いません」の原因と解決方法
createdbを実行すると、
createdb: データベースの生成に失敗しました: ERROR: 符号化方式 EUC_JP がロケール ja_JP.UTF-8 に合いません
といったエラーになることがある。
エラーメッセージから原因がほぼ分かるが、要するに、ロケールの文字コードと作成するDBの文字コードが異なるためにエラーが出ているようだ。
1)createdb失敗時のエラーメッセージ(標準出力)を確認
[root@nobuneko ~]# createdb -U postgres -E EUC_JP nobuneko_database
createdb: データベースの生成に失敗しました: ERROR: 符号化方式 EUC_JP がロケール ja_JP.UTF-8 に合いません
DETAIL: 選択された LC_CTYPE を設定するには、符号化方式 UTF8 である必要があります。
2)createdb失敗時にpg_log配下に出力されるエラーログを確認
[root@nobuneko pg_log]# cat /var/lib/pgsql/data/pg_log/postgresql-Thu.log
ERROR: 符号化方式 EUC_JP がロケール ja_JP.UTF-8 に合いません
詳細: 選択された LC_CTYPE を設定するには、符号化方式 UTF8 である必要があります。
ステートメント: CREATE DATABASE nobuneko_database ENCODING 'EUC_JP';
3)データベース一覧を表示して文字コードを確認する。
[root@nobuneko ~]# psql -U postgres
psql (8.4.7)
"help" でヘルプを表示します.
postgres=# \l
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres
: postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres
: postgres=CTc/postgres
(3 行)
4)ロケールとテンプレートを指定してcreatedbを実行する。
[root@nobuneko ~]# createdb -U postgres -E EUC_JP --locale=ja_JP.EUC_JP nobuneko_database --template=template0
5)データベースの作成に成功した場合、作成したデータベースにpsql接続ができるかを確認する。
[root@nobuneko ~]# psql -U postgres nobuneko_database
psql (8.4.7)
"help" でヘルプを表示します.
nobuneko_database=# \q
※上記の4)の結果、createdbができるようになっていれば、createdbが失敗した原因が、ロケールとテンプレート指定の問題である、ということが分かる。