他のバージョンの文書 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

ALTER COLLATION

ALTER COLLATION — 照合順序の定義を変更する

概要

ALTER COLLATION name REFRESH VERSION

ALTER COLLATION name RENAME TO new_name
ALTER COLLATION name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
ALTER COLLATION name SET SCHEMA new_schema

説明

ALTER COLLATIONは照合順序の定義を変更します。

ALTER COLLATIONを使用するためには照合順序を所有していなければなりません。 所有者を変更するためには、新しい所有ロールの直接あるいは間接的なメンバでなければならず、かつ、そのロールが照合順序のスキーマにおけるCREATE権限を持たなければなりません (この制限により、照合順序の削除と再作成を行ってもできないことが所有者の変更で行えないようにします。 ただし、スーパーユーザはすべての照合順序の所有者を変更することができます)。

パラメータ

name

既存の照合順序の名前(スキーマ修飾可)です。

new_name

照合順序の新しい名前です。

new_owner

照合順序の新しい所有者です。

new_schema

照合順序の新しいスキーマです。

REFRESH VERSION

照合順序のバージョンを更新します。 以下のNotesを参照してください。

注釈

ICUライブラリが提供する照合順序を使う場合、照合順序オブジェクトを作成する時に、照合器のICU固有のバージョンがシステムカタログに記録されます。 照合順序が使われるとき、現在のバージョンと記録されているバージョンが比較され、不適合の場合は以下の例のように警告が発行されます。

WARNING:  collation "xx-x-icu" has version mismatch
DETAIL:  The collation in the database was created using version 1.2.3.4, but the operating system provides version 2.3.4.5.
HINT:  Rebuild all objects affected by this collation and run ALTER COLLATION pg_catalog."xx-x-icu" REFRESH VERSION, or build PostgreSQL with the right library version.

データベースシステムは、保存されたオブジェクトが一定のソート順になっていることに依存しているため、照合順序を変更するとインデックスが破損するなどといった問題につながります。 一般的にこれは避けるべきですが、pg_upgradeを使って新しいバージョンのICUライブラリとリンクされたサーバのバイナリへとアップグレードする場合など、仕方のない場合もあります。 これが発生する場合は、照合順序に依存するすべてのオブジェクトを、例えばREINDEXを使って再構築します。 これがされれば、照合順序のバージョンをコマンドALTER COLLATION ... REFRESH VERSIONを使って更新できます。 これにより、システムカタログが更新されて照合器の現在のバージョンが記録され、警告が出なくなります。 これは、影響を受けるすべてのオブジェクトが正しく再構築されたかどうかを実際に確認するわけではないことに注意してください。

libcが提供する照合順序を使い、PostgreSQLがGNU Cライブラリで構築されている場合、照合順序としてはCライブラリのものが使われます。 照合順序の定義は、典型的にはGNU Cライブラリのリリースで変わるだけですので、これは破損に対していくらかの防御を提供しますが、完全には信頼できるものではありません。

今のところ、データベースのデフォルトの照合順序に対するバージョン追跡はありません。

以下の問い合わせを使って、現在のデータベース内の更新が必要なすべての照合順序と、それに依存するオブジェクトを特定することができます。

SELECT pg_describe_object(refclassid, refobjid, refobjsubid) AS "Collation",
       pg_describe_object(classid, objid, objsubid) AS "Object"
  FROM pg_depend d JOIN pg_collation c
       ON refclassid = 'pg_collation'::regclass AND refobjid = c.oid
  WHERE c.collversion <> pg_collation_actual_version(c.oid)
  ORDER BY 1, 2;

照合順序de_DEの名前をgermanに変更します。

ALTER COLLATION "de_DE" RENAME TO german;

照合順序en_USの所有者をjoeに変更します。

ALTER COLLATION "en_US" OWNER TO joe;

互換性

標準SQLにはALTER COLLATION文はありません。

関連項目

CREATE COLLATION, DROP COLLATION