web-dev-qa-db-ja.com

Postgresデータベースに新しい照合順序を追加する

私はこれらの照合を持っています:

postgres =#select * from pg_collat​​ion; 
 collname | collnamespace | collowner | collencoding | collcollat​​e | collctype 
 ------------ + --------------- + ----------- + --- ----------- + ------------- + ----------- 
デフォルト| 11 | 10 | -1 | | 
 C | 11 | 10 | -1 | C | C 
 POSIX | 11 | 10 | -1 | POSIX | POSIX 
 en_US | 11 | 10 | 6 | en_US.utf8 | en_US.utf8 
 en_US.utf8 | 11 | 10 | 6 | en_US.utf8 | en_US.utf8 
 ucs_basic | 11 | 10 | 6 | C | C 
(6行)

システムに新しいロケールをインストールしましたが、postgresで使用したいと思います。新しい照合をインストールする唯一の方法はinitdbコマンドを使用することですが、pg_dumpallを作成し、postgresデータディレクトリを削除し、initdbを実行してすべてを復元する必要がありますダンプからのデータ。より簡単な解決策はありませんか?

6
José Luis

新しいDBクラスターを作成する必要はありません。 Postgres 9.1以降では CREATE COLLATION を使用できます。マニュアルの例:

オペレーティングシステムロケールfr_FR.utf8から照合順序を作成するには(現在のデータベースエンコーディングがUTF8であると想定):

CREATE COLLATION french (LOCALE = 'fr_FR.utf8');

詳細については、マニュアルの 照合順序の管理 の章を必ずお読みください。特に:

特定のデータベース内では、そのデータベースのエンコーディングを使用する照合のみが対象です。 pg_collationの他のエントリは無視されます。

つまり、照合順序は、使用できるようにデータベースエンコーディングと一致する必要があります。
しかし、まだまだあります。それを読んで。

7