CREATE COLLATION

CREATE COLLATION — 新しい照合順序を定義する

概要

CREATE COLLATION [ IF NOT EXISTS ] name (
    [ LOCALE = locale, ]
    [ LC_COLLATE = lc_collate, ]
    [ LC_CTYPE = lc_ctype, ]
    [ PROVIDER = provider, ]
    [ DETERMINISTIC = boolean, ]
    [ RULES = rules, ]
    [ VERSION = version ]
)
CREATE COLLATION [ IF NOT EXISTS ] name FROM existing_collation

説明

CREATE COLLATIONは指定したオペレーティングシステムのロケール設定を使用、または既存の照合順序をコピーすることで新しい照合順序を定義します。

照合順序を新しく作成するためには、格納先のスキーマにおけるCREATE権限が必要です。

パラメータ

IF NOT EXISTS

同じ名前の照合順序が既に存在する場合にエラーを発生させません。 この場合、注意メッセージが発行されます。 既存の照合順序が作られようとしていたものと類似したものかどうか、全く保証されないことに注意してください。

name

照合順序の名前です。 照合順序の名前はスキーマ修飾することができます。 スキーマ修飾されていない場合、照合順序は現在のスキーマ内に定義されます。 照合順序の名前はそのスキーマ内で一意でなければなりません。 (システムカタログでは異なる符号化方式に対して同じ名前の照合順序を含めることができます。 しかしデータベース符号化方式が異なる場合には無視されます。)

locale

この照合順序のロケール名です。 詳しくは24.2.2.3.124.2.2.3.2を見てください。

providerlibcなら、これは同時にLC_COLLATEおよびLC_CTYPEを設定する省略形です。 localeを指定した場合、これらのパラメータのどちらも指定できません。

lc_collate

providerlibcなら、LC_COLLATEロケールカテゴリに対して指定したオペレーティングシステムのロケールを使用します。

lc_ctype

providerlibcなら、LC_CTYPEロケールカテゴリに対して指定したオペレーティングシステムのロケールを使用します。

provider

この照合順序に関連するロケールサービスで使用するプロバイダを指定します。 取り得る値はicu(サーバがICUサポートで構築されている場合)とlibcです。 libcがデフォルトです。 詳しくは24.1.4を参照してください。

DETERMINISTIC

照合順序が決定論的な比較を使うかどうかを指定します。 デフォルトは真です。 決定論的な比較では、たとえ論理的に比較すれば等しいとみなされるものであっても、バイト単位で等しくない文字列は等しくないとみなします。 PostgreSQLはバイト単位の比較を使って分解します。 決定論的でない比較では、例えば、照合順序で大文字小文字を区別しない、またはアクセントを区別しないようにできます。 そのためには、適切なLC_COLLATEの設定を選んだ上で、ここで照合順序を非決定論的なものに設定することが必要です。

非決定論的な照合順序はICUプロバイダでのみサポートされています。

rules

照合順序の動作をカスタマイズするための追加の照合順序規則を指定します。 これはICUでのみサポートされています。 詳細は24.2.3.4を参照してください。

version

照合順序と一緒に保存するバージョン文字列を指定します。 通常は省略すべきで、省略するとオペレーティングシステムが提供する照合順序の実際のバージョンから計算されます。 このオプションはpg_upgradeが既存のインストレーションからバージョンをコピーする時に使われることを意図したものです。

照合順序のバージョン不適合を処理する方法については、ALTER COLLATIONも参照してください。

existing_collation

コピーする既存の照合順序の名前です。 新しい照合順序は既存のものと同じ属性を持ちますが、独立したオブジェクトになります。

注意

CREATE COLLATIONSHARE ROW EXCLUSIVEロックを使い、そのロックはpg_collationシステムカタログで衝突します。ですので、CREATE COLLATIONは一度に1つしか実行できません。

ユーザ定義の照合順序を削除するためにはDROP COLLATIONを使用してください。

照合順序の作成についての更なる情報については24.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');

ICUプロバイダを使い、ルートICUロケールに基づいて、カスタム規則を使って照合順序を作成するには、次のようにします。

CREATE COLLATION custom (provider = icu, locale = 'und', rules = '&V << w <<< W');

規則の構文の詳細と例については、24.2.3.4を参照してください。

既存の照合順序から照合順序を作成します。

CREATE COLLATION german FROM "de_DE";

アプリケーションにおいてオペレーティングシステムに依存しない照合順序の名前を使用することができ、便利になるかもしれません。

互換性

標準SQLにはCREATE COLLATIONが存在しますが、既存の照合順序のコピーに限定されています。 新しい照合順序を作成するための構文はPostgreSQLの拡張です。

関連項目

ALTER COLLATION, DROP COLLATION