ロケールのサポートロケールのサポートはアルファベット、並び換え、数字の書式など文化的嗜好を配慮したあるアプリケーションを対象にします。CとPOSIXのロケール機能を使用します。これ以上の情報についてはお使いのシステムのドキュメントを参照ください。概要ロケールのサポートは、initdbを使用してデータベースクラスタを作成する時自動的に初期化されます。initdbは、デフォルトでその実行環境のロケール設定に従ってデータベースクラスタを初期化します。そのため、システムがデータベースクラスタで使用したいロケールを使用するように既に設定してある場合は何も行う必要はありません。違うロケールを使用したい場合(またはシステムのロケール設定が不明な場合)は、initdbの--localeオプションで希望のロケールを指定することができます。--locale=sv_SEこの例の設定はロケールをスウェーデン(SE)で使用されているスウェーデン語(sv)に合わせています。他にもen_US(米国英語)やfr_CA(カナダのフランス語)などの設定もできます。ロケールに複数の文字セットが使用可能であれば、cs_CZ.ISO8859-2のように記述することができます。-aというコマンドで利用可能なロケールの一覧を入手することができます)。英語の照合規則でスペイン語のメッセージを使用する時など、時として複数のロケールの規則を併用すると便利です。これをサポートするために、ロケールには以下のような多言語対応規則の特定の箇所だけを管理する一連のサブカテゴリがあります。日付と時刻の書式これらのカテゴリの名前は、特定のカテゴリについてのロケールの選択を上書きするためのinitdbオプションの名前としてそのまま使用できます。--lc-monetary=en_USとします。システムがロケールをサポートしていないように動作させたい場合は、特別なロケールのC、もしくはPOSIXを使用してください。一部のロケールカテゴリでは、その値をデータベースクラスタの存続時間に対して固定しなければならないものがあります。initdbの実行後はこれらの値を変更できなくなります。LC_COLLATEとLC_CTYPEがこのカテゴリに入ります。これらはインデックスの並び替え順に影響を及ぼすため、固定されていなければなりません。ないと、テキスト型列上のインデックスは破壊されます。PostgreSQLはinitdbが検知したLC_COLLATEとLC_CTYPEの値を記録して、この固定が必ず守られるようにします。サーバは起動された時点で自動的にこれらの2つの値を採用します。(詳細は第17章を参照してください)。initdbで選択されたデフォルトは、実際のところ、サーバの起動時にデフォルトとして動作するようにpostgresql.conf設定ファイルに書き込まれるだけです。この代入文をpostgresql.confから削除すると、サーバは実行環境の設定をそのまま使用します。サーバのロケールの動作はどのクライアントの環境にも依存せず、サーバが参照できる環境変数で決まります。サーバを稼動させる前に正しいロケール設定を行うように注意してください。結果としてサーバとクライアントで異なるロケールが設定されていると、メッセージはそれらがどこから生じたかによって、異なる言語で表示されます。実行環境のロケールをそのまま使用するということは、ほとんどのオペレーションシステムでは次のような意味を持ちます。指定されたロケールカテゴリ(例えば照合)について、設定するものが見つかるまで、以下の環境変数がこの順番で調べられます。LC_ALL、LC_COLLATE(個別のカテゴリに対応する変数)、LANG。これらのいずれの環境変数も設定されない場合に、ロケールはデフォルトでCに設定されます。メッセージの言語を設定する目的で、メッセージ多言語化ライブラリの中には全てのロケール設定を上書きする環境変数LANGUAGEを検索するものがあります。嘘だと思うのであればより詳細な情報を得るためお使いのオペレーティングシステムの文書、特にgettextの文書を参照してください。ユーザの選択した言語にメッセージを翻訳できるようにするためにはNLSを構築時に有効にする必要があります。このオプションは他のロケールサポートとは独立しています。動作ロケールの設定は以下のSQL機能に影響を与えます。一群のto_char関数CやPOSIX以外で、PostgreSQLでロケールを使用する際の欠点は実行速度です。ロケールは文字の扱いを遅くし、さらにLIKEで通常のインデックスが使用されなくなります。この理由から、本当に必要な時のみロケールを使用してください。C以外のロケールにおいて、PostgreSQLがLIKE句を持つインデックスを使用できるようにする回避方法として、いくつかのカスタム演算子クラスがあります。これらを用いると、文字と文字を厳密に比較するようなインデックスや、ロケールの比較ルールを無視するようなインデックスを作成できます。詳細は項11.8を参照してください。上記の説明に従って設定を行ったにもかかわらずロケールのサポートが正常に動作しない場合、オペレーティングシステムのロケールサポートが正確に設定されているか確認してください。-aコマンドを使用をすることができます。PostgreSQLが想定しているロケールを実際に使用しているかどうかを確認してください。LC_COLLATEとLC_CTYPEの設定はinitdb時に決定され、initdbを再実行しない限り変更することはできません。LC_MESSAGESやLC_MONETARYなど他のロケール設定はサーバ起動時の環境変数によって初めに決定されますが、その場で変更することができます。SHOWコマンドを使用して、使用中のロケール設定を確認することができます。ソース配布物のsrc/test/localeディレクトリには、PostgreSQLのロケールサポート用の試験一式があります。エラーメッセージ内のテキストを解析してサーバ側のエラーを扱っているクライアントアプリケーションでは、サーバのメッセージが異なる言語で記載されると、明らかに問題になります。したアプリケーションの作者には、エラーコードスキーマで代替させることを推奨します。メッセージ翻訳のカタログのメンテナンスにはPostgreSQLに選択した言語を話させてみたいという数多くのボランティアのたゆみのない努力を必要としています。あなたの言語が現在使えなかったり完全に翻訳されてない場合、助力をよろしくお願いします。助力頂けるのであれば、第46章を参照するか開発グループのメーリングリストに投稿してください。