ALTER INDEX [ IF EXISTS ] name RENAME TO new_name ALTER INDEX [ IF EXISTS ] name SET TABLESPACE tablespace_name ALTER INDEX [ IF EXISTS ] name SET ( storage_parameter = value [, ... ] ) ALTER INDEX [ IF EXISTS ] name RESET ( storage_parameter [, ... ] ) ALTER INDEX ALL IN TABLESPACE name [ OWNED BY role_name [, ... ] ] SET TABLESPACE new_tablespace [ NOWAIT ]
ALTER INDEXは既存のインデックスの定義を変更します。 以下のような副構文が存在します。
インデックスが存在しない場合にエラーとしません。 この場合注意メッセージが発生します。
このRENAME構文は、インデックスの名前を変更します。 格納されたデータには影響しません。
この構文は、インデックスのテーブル空間を指定したテーブル空間に変更し、インデックスに関連するデータファイルを移動します。 インデックスのテーブル空間を変更するには、インデックスの所有者であり、かつ新しいテーブル空間のCREATE権限を有している必要があります。 ALL IN TABLESPACE構文を使うことで、テーブル空間内の現在のデータベースのすべてのインデックスを移動することができます。 この場合、移動されるすべてのインデックスがロックされ、それから1つずつ移動されます。 この構文はOWNED BYもサポートしており、これを使うと、指定のロールが所有しているインデックスだけを移動します。 NOWAITオプションを指定した場合、必要とするすべてのロックを即座に獲得できなければ、このコマンドは失敗します。 このコマンドではシステムカタログは移動されないことに注意してください。 必要であれば、ALTER DATABASEを使うか、あるいはALTER INDEXで明示的に指定してください。 CREATE TABLESPACEも参照してください。
この構文は、インデックスに対し、インデックスメソッド固有の1つ以上の格納パラメータを変更します。 設定可能なパラメータについてはCREATE INDEXを参照してください。 このコマンドにより、インデックスの内容がすぐに変更されるわけではないことに注意してください。 パラメータによりますが、期待する効果を得るためにREINDEXを使用してインデックスを再構築しなければならない場合もあります。
この構文は、1つ以上のインデックスメソッド固有の格納パラメータをデフォルト値に再設定します。 SET同様、インデックスを完全に更新するためにREINDEXが必要になる場合があります。
変更対象の既存のインデックスの名前です(スキーマ修飾名も可)。
インデックスの新しい名前です。
インデックスの移動先のテーブル空間です。
インデックスメソッド固有の格納パラメータの名前です。
インデックスメソッド固有の格納パラメータの新しい値です。 パラメータに応じてこれが数値になることも文字列になることもあります。
これらの操作はALTER TABLEを使用して行うこともできます。 実際には、ALTER INDEXは、ALTER TABLEのインデックス用構文の別名に過ぎません。
以前はALTER INDEX OWNERという種類の構文がありましたが、(警告の上)無視されるようになりました。 インデックスの所有者は基のテーブルの所有者と異なるものにすることができません。 テーブルの所有者を変更すると自動的にインデックスの所有者も変わります。
システムカタログ用インデックスに対する変更は許されていません。