他のバージョンの文書 16 | 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_ROLE | CURRENT_USER | SESSION_USER }
ALTER COLLATION name SET SCHEMA new_schema

説明

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

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

パラメータ

name

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

new_name

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

new_owner

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

new_schema

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

REFRESH VERSION

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

注釈

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

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が提供する照合順序を使う場合、GNU Cライブラリ(ほとんどのLinuxシステム)、FreeBSD、Windowsを使ってバージョン情報がシステムに記録されます。 ICUが提供する照合順序を使う場合、バージョン情報はICUライブラリにより提供され、すべてのプラットフォームで利用できます。

注記

照合順序にGNU Cライブラリを使う場合、Cライブラリのものは照合順序のプロキシとして使われます。 多くのLinuxのディストリビューションではCライブラリをアップデートする時にのみ照合順序の定義を変更しますが、メンテナは新しい照合順序の定義を古いCライブラリのリリースに自由にバックポートできますので、この方法は不完全なものです。

照合順序にWindowsを使う場合、バージョン情報は、en-USのようなBCP 47言語タグで定義された照合順序のみが利用可能です。

データベースのデフォルト照合順序に対しては、類似のコマンドALTER DATABASE ... REFRESH COLLATION VERSIONがあります。

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

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