CREATE COLLATION — 新しい照合順序を定義する
CREATE COLLATION [ IF NOT EXISTS ]name
( [ LOCALE =locale
, ] [ LC_COLLATE =lc_collate
, ] [ LC_CTYPE =lc_ctype
, ] [ PROVIDER =provider
, ] [ DETERMINISTIC =boolean
, ] [ VERSION =version
] ) CREATE COLLATION [ IF NOT EXISTS ]name
FROMexisting_collation
CREATE COLLATION
は指定したオペレーティングシステムのロケール設定を使用、または既存の照合順序をコピーすることで新しい照合順序を定義します。
照合順序を新しく作成するためには、格納先のスキーマにおけるCREATE
権限が必要です。
IF NOT EXISTS
同じ名前の照合順序が既に存在する場合にエラーを発生させません。 この場合、注意メッセージが発行されます。 既存の照合順序が作られようとしていたものと類似したものかどうか、全く保証されないことに注意してください。
name
照合順序の名前です。 照合順序の名前はスキーマ修飾することができます。 スキーマ修飾されていない場合、照合順序は現在のスキーマ内に定義されます。 照合順序の名前はそのスキーマ内で一意でなければなりません。 (システムカタログでは異なる符号化方式に対して同じ名前の照合順序を含めることができます。 しかしデータベース符号化方式が異なる場合には無視されます。)
locale
これは同時にLC_COLLATE
およびLC_CTYPE
を設定する省略形です。
これを指定した場合、これらのパラメータのどちらも指定することはできません。
lc_collate
LC_COLLATE
ロケールカテゴリに対して指定したオペレーティングシステムのロケールを使用します。
lc_ctype
LC_TYPE
ロケールカテゴリに対して指定したオペレーティングシステムのロケールを使用します。
provider
この照合順序に関連するロケールサービスで使用するプロバイダを指定します。
取り得る値はicu
と libc
です。
libc
がデフォルトです。
利用可能な選択肢はオペレーティングシステムとビルド時のオプションに依存します。
DETERMINISTIC
照合順序が決定論的な比較を使うかどうかを指定します。
デフォルトは真です。
決定論的な比較では、たとえ論理的に比較すれば等しいとみなされるものであっても、バイト単位で等しくない文字列は等しくないとみなします。
PostgreSQLはバイト単位の比較を使って分解します。
決定論的でない比較では、例えば、照合順序で大文字小文字を区別しない、またはアクセントを区別しないようにできます。
そのためには、適切なLC_COLLATE
の設定を選んだ上で、ここで照合順序を非決定論的なものに設定することが必要です。
非決定論的な照合順序はICUプロバイダでのみサポートされています。
version
照合順序と一緒に保存するバージョン文字列を指定します。
通常は省略すべきで、省略するとオペレーティングシステムが提供する照合順序の実際のバージョンから計算されます。
このオプションはpg_upgrade
が既存のインストレーションからバージョンをコピーする時に使われることを意図したものです。
照合順序のバージョン不適合を処理する方法については、ALTER COLLATIONも参照してください。
existing_collation
コピーする既存の照合順序の名前です。 新しい照合順序は既存のものと同じ属性を持ちますが、独立したオブジェクトになります。
CREATE COLLATION
はSHARE ROW EXCLUSIVE
ロックを使い、そのロックはpg_collation
システムカタログで衝突します。ですので、CREATE COLLATION
は一度に1つしか実行できません。
ユーザ定義の照合順序を削除するためにはDROP COLLATION
を使用してください。
照合順序の作成についての更なる情報については23.2.2.3を参照してください。
libc
照合順序プロバイダを使う場合、ロケールは現在のデータベース符号化方式に適用可能でなければなりません。
正確な規則についてはCREATE DATABASEを参照してください。
オペレーティングシステムのロケールfr_FR.utf8
から照合順序を作成します
(現在のデータベース符号化方式がUTF8
であるとします)。
CREATE COLLATION french (locale = 'fr_FR.utf8');
ICUプロバイダを使い、ドイツの電話帳のソート順を使った照合順序を作成します。
CREATE COLLATION german_phonebook (provider = icu, locale = 'de-u-co-phonebk');
既存の照合順序から照合順序を作成します。
CREATE COLLATION german FROM "de_DE";
アプリケーションにおいてオペレーティングシステムに依存しない照合順序の名前を使用することができ、便利になるかもしれません。
標準SQLにはCREATE COLLATION
が存在しますが、既存の照合順序のコピーに限定されています。
新しい照合順序を作成するための構文はPostgreSQLの拡張です。