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が失敗した原因が、ロケールとテンプレート指定の問題である、ということが分かる。

前へ

PostgreSQLエラー「psql: could not connect to server: ホストへの経路がありません」の原因と解決方法(iptablesの設定)

次へ

iPod Touchのおかげで、ようやくGmailを利用する気になった