どういった場合はPostgreSQLサーバーを使用して"C"ロケール?
-
13-09-2019 - |
質問
ようにしている最適なPostgreSQL8.3DBテーブル、私の力、私ただしを使用する必要が varchar_pattern_ops
特定のカラムが私を行う LIKE
対Nの文字の文字列になります。による このドキュメント, 用途-使用 xxx_pattern_ops
必要のな"アセットアロケーションの名前ベースのバーチャルホストに使用するので、'C'のロケール".
できる人ということです。確認方法を教えてくださいうロケールのデータベースです。
解決
現在、いくつかのロケール[ドキュメントの]サポートはのみに設定することができます時間initdbを、私は_pattern_ops
に関連する1は、 SET経由で変更することができると思います>実行時に、LC_COLLATE。設定値を確認するには、 SHOW のコマンドを使用することができます。
例
SHOW LC_COLLATE
_pattern_ops
インデックスはLIKE
または正規表現のように、パターンマッチングの構築物を使用する列に有用です。あなたはまだインデックスに平等の検索を行うには(_pattern_ops
なし)通常のインデックスを作成する必要があります。だから、あなたはあなたのテーブルの上に、このようなインデックスを必要とするかどうかを確認するために考慮にこのすべてを取る必要があります。
が何であるかをロケールについては、それが書式設定と同様のもの、文字の順序に関する規則のセットですそれは別の言語/国に言語/国によって異なります。たとえば、ロケールfr_CAと(カナダのフランス語)は、いくつかの異なるソート規則(または数値を表示し、その上の道を)持っているかもしれませんen_CAより(カナダ英語)。標準の「C」ロケールがPOSIX標準に準拠したデフォルトロケールです。唯一の厳格なASCII文字が有効であり、かつ秩序や書式のルールは、
ほとんどはen_US(米国英語)のものであり、は、コンピューティングでは、ロケールの集合であります ユーザーの定義したパラメータ 言語、国、特別な そのユーザバリアント設定 ユーザーインターフェイスで見たいです。 通常、ロケール識別子は構成されてい 少なくとも言語識別子のと 領域識別子
他のヒント
psql-l
よ手帳
出力例:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-------------+--------+----------+-------------+-------------+-------------------
packrd | packrd | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
postgres | packrd | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | packrd | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/packrd +
| | | | | packrd=CTc/packrd
template1 | packrd | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/packrd +
| | | | | packrd=CTc/packrd
(5 rows)
(あなたがいないそれらを変更、それらを確認したいと仮定して)別の方法もあります
チェックファイル/var/lib/postgres/data/postgresql.conf 次の行が見つかるはずます:
# These settings are initialized by initdb, but they can be changed.
lc_messages = 'en_US.UTF-8' # locale for system error message strings
lc_monetary = 'en_US.UTF-8' # locale for monetary formatting
lc_numeric = 'en_US.UTF-8' # locale for number formatting
lc_time = 'en_US.UTF-8' # locale for time formatting
OK、私のperusingsから、それは、この初期設定
が表示されます initdb --locale=xxx
--locale=locale
Specifies the locale to be used in this database. This is equivalent to specifying both --lc-collate and --lc-ctype.
は、基本的には、あなたはそれが(すなわち、それはデフォルトのテンプレートである、template1をするための設定を指定)した後に作成するすべてのデータベースのための「デフォルト」のロケールを指定します。あなたは、このような異なるロケールで新しいデータベースを作成することができます:
ロケールエンコーディングと異なる、手動で指定することができますそれおよび/またはエンコーディングををます:
CREATE DATABASE korean WITH ENCODING 'EUC_KR' LC_COLLATE='ko_KR.euckr' LC_CTYPE='ko_KR.euckr' TEMPLATE=template0;
あなたは手動でそれを呼び出したい場合ます。
あなたはそれを指定しない場合は、基本的には、それはほとんど「C」になることはありませんシステムのデフォルトを使用します。
あなたのshow LC_COLLATE
が「C」または「POSIX」、あなたはstandard C locale
を使用していないと、あなたのインデックスにはxxx_pattern_opsを指定する必要があります以外のものを返すのであれば。注また、警告に、あなたが<使用したい場合は、 <=、>、または> =演算子は、あなたは(...あなたは稀であり、データベース上の標準のCロケールを使用している場合を除く)はxxx_pattern_opsフラグなしで2番目のインデックスを作成する必要があります。ちょうど==とLIKE
(など)のために、あなたは、2番目のインデックスは必要ありません。あなたがLIKE
を必要としないなら、あなたにも、おそらく、はxxx_pattern_opsでインデックスを必要としません。
あなたのインデックスが
のような「デフォルト」と照合するように定義されている場合でも、CREATE INDEX my_index_name
ON table_name
USING btree
(identifier COLLATE pg_catalog."default");
このデフォルトは「C」(またはPOSIX、同じもの)の照合でない限り、それはLIKE 'ABC%'
のようなパターンに使用することができない、十分ではありません。
CREATE INDEX my_index_name
ON table_name
USING btree
(identifier COLLATE pg_catalog."default" varchar_pattern_ops);
また、オプション...
きを再現データベースのクラスター Cロケールです。
渡す必要がありまロケールに initdb 時 初期化 おPostgresインスタンス.
これまでの如何にかかわらず、サーバのデフォルトまたはユーザのロケールです。
ことになるサーバの管理コマンドがないデータベースのスキーマのデザイナーです。クラスタを含むすべてのデータベースのサーバだけでなく、のんの最適化.
するためのブランドの新しいクラスターにな移行の既存のデータベースやデータです。と思いきます。
さらに、まる位置まで出することが可能となる。トランオプションとしてお考えではPostgreSQLを利用8.4くことができる 当たりデータベースのロケール, 指定されたの 作成データベースの声明.