PostgreSQL 8.3でEUC_JPのデータベースが作成できない時の原因と解決方法
Solarisのコンソール画面等で「createdb -U postgres -E EUC_JP データベース名」とコマンドを叩き、PostgreSQLのデータベースをEUC_JPで作成しようとすると、サーバのロケール(UTF-8)と一致しない、といったエラーメッセージが表示され、作成に失敗してしまうことがある。
$ createdb -U postgres -E EUC_JP nobuneko
ERROR: encoding EUC_JP does not match server's locale ja_JP.UTF-8
DETAIL: The server's LC_CTYPE setting requires encoding UTF8.
STATEMENT: CREATE DATABASE nobuneko ENCODING 'EUC_JP';
createdb: データベースの生成に失敗しました: ERROR: encoding EUC_JP does not match server's locale ja_JP.UTF-8
DETAIL: The server's LC_CTYPE setting requires encoding UTF8.
どうやら、initdbを実行する時のコマンドが悪かったようだ。
《EUC_JPのデータベースの作成に失敗した時のinitdbのコマンド》
/usr/local/postgresql8/bin/initdb -D /usr/local/postgresql8/data
《EUC_JPのデータベースの作成に成功した時のinitdbのコマンド》
/usr/local/postgresql8/bin/initdb --encoding=EUC_JP --no-locale -D /usr/local/postgresql8/data
このように「--encoding=EUC_JP」と「--no-locale」といったオプションをつけてinitdbをやり直せば解決した。