Note: 作者:Oleg Bartunov。 ロケールとロシア語サポートに関する詳細は、 Oleg の Web ページを参照のこと。
時々、自分たちの言語に関するロケールがうまく動かないと文句を 言う人がいますが、これは以下のミスに起因することが多いのです:
コンパイルする前に postgresql を適切に構成していない。 ロケールサポートを有効にするために、--enable-locale オプショ ン付きで configure を実行してやらなければなりません。 postmaster を起動する際に、きちんと環境変数を設定していない。 postmaster を起動する前に、LC_CTYPE および LC_COLLATE 環境変数を定義してやり、バックエン ドが環境変数からロケール情報を取得できるようにしてやる必要が あります。私は以下のようなシェルスクリプト(runpostgres)を使っ ています:
#!/bin/sh export LC_CTYPE=koi8-r export LC_COLLATE=koi8-r postmaster -B 1024 -S -D/usr/local/pgsql/data/ -o '-Fe'そしてこれを rc.local で以下のように起動します。
/bin/su - postgres -c "/home/postgres/runpostgres"
OS におけるロケールのサポートは正しくないことがあります。例 をあげると、Linux 上の libc によるロケールのサポートはしばし ば変更され、これが多大な混乱を引き起こしています。perl の最 新版でもロケールがサポートされており、これがただしく設定され ないと、perl -v で以下の警告メッセージが 表示されます:
8:17[mira]:~/WWW/postgres>setenv LC_CTYPE not_exist 8:18[mira]:~/WWW/postgres>perl -v perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LC_ALL = (unset), LC_CTYPE = "not_exist", LANG = (unset) are supported and installed on your system. perl: warning: Falling back to the standard locale ("C").
誤った位置にあるロケールファイル! 一般に、以下の位置になります: /usr/lib/locale (Linux, Solaris), /usr/share/locale (Linux), /usr/lib/nls/loc (DUX 4.0). 正しい位置に関しては man locale に書いて あります。私は Linux では /usr/lib/locale と /usr/share/locale の間にシンボリック リンクを張って、次のバージョンの libc でも正しく動くようにし ました。
自国語アルファベットを含む文字列に対して ~* や order by 演算子が使えます。非英語圏のユーザにとっては必須の機能でしょ う。ロケール機能を使いたくなければ、USE_LOCALE 環境変数を未 定義にするだけですみます。
ロケールには明らかな欠点があります。その速度です!このため、 本当に使いたいときにのみロケールを使うようにしてください。