ALTER INDEX — インデックス定義を変更する
ALTER INDEX [ IF EXISTS ]name
RENAME TOnew_name
ALTER INDEX [ IF EXISTS ]name
SET TABLESPACEtablespace_name
ALTER INDEXname
ATTACH PARTITIONindex_name
ALTER INDEXname
DEPENDS ON EXTENSIONextension_name
ALTER INDEX [ IF EXISTS ]name
SET (storage_parameter
[=value
] [, ... ] ) ALTER INDEX [ IF EXISTS ]name
RESET (storage_parameter
[, ... ] ) ALTER INDEX [ IF EXISTS ]name
ALTER [ COLUMN ]column_number
SET STATISTICSinteger
ALTER INDEX ALL IN TABLESPACEname
[ OWNED BYrole_name
[, ... ] ] SET TABLESPACEnew_tablespace
[ NOWAIT ]
ALTER INDEX
は既存のインデックスの定義を変更します。
以下のような副構文が存在します。
要求されるロックレベルはそれぞれの副構文によって異なることに注意してください。
特に記述がなければACCESS EXCLUSIVE
ロックを取得します。
複数のサブコマンドが使われるときは、それらのサブコマンドが要求するうち、もっとも高いレベルのロックを取得します。
RENAME
このRENAME
構文は、インデックスの名前を変更します。
インデックスがテーブル制約(UNIQUE
、PRIMARY KEY
、EXCLUDE
のいずれか)と関連付けられていた場合、制約名も変更されます。
格納されたデータには影響しません。
インデックスの名前の変更にはSHARE UPDATE EXCLUSIVE
ロックが必要です。
SET TABLESPACE
この構文は、インデックスのテーブル空間を指定したテーブル空間に変更し、インデックスに関連するデータファイルを移動します。
インデックスのテーブル空間を変更するには、インデックスの所有者であり、かつ新しいテーブル空間のCREATE
権限を有している必要があります。
ALL IN TABLESPACE
構文を使うことで、テーブル空間内の現在のデータベースのすべてのインデックスを移動することができます。
この場合、移動されるすべてのインデックスがロックされ、それから1つずつ移動されます。
この構文はOWNED BY
もサポートしており、これを使うと、指定のロールが所有しているインデックスだけを移動します。
NOWAIT
オプションを指定した場合、必要とするすべてのロックを即座に獲得できなければ、このコマンドは失敗します。
このコマンドではシステムカタログは移動されないことに注意してください。
必要であれば、ALTER DATABASE
を使うか、あるいはALTER INDEX
で明示的に指定してください。
CREATE TABLESPACEも参照してください。
ATTACH PARTITION
指定されたインデックスを変更するインデックスに付加します。 指定されたインデックスは、変更するインデックスを持つテーブルのパーティションに対するもので、かつ、同じ定義を持たなければなりません。 付加されたインデックスは、それ自身として削除できず、親インデックスが削除された場合に自動的に削除されます。
DEPENDS ON EXTENSION extension_name
NO DEPENDS ON EXTENSION extension_name
この構文は、インデックスが拡張に依存している、もしくはNO
が指定された場合には拡張にもはや依存していないと印を付けます。
拡張に依存していると印をつけられたインデックスは、拡張が削除されると自動的に削除されます。
SET ( storage_parameter
[= value
] [, ... ] )
この構文は、インデックスに対し、インデックスメソッド固有の1つ以上の格納パラメータを変更します。 設定可能なパラメータについてはCREATE INDEXを参照してください。 このコマンドにより、インデックスの内容がすぐに変更されるわけではないことに注意してください。 パラメータによりますが、期待する効果を得るためにREINDEXを使用してインデックスを再構築しなければならない場合もあります。
RESET ( storage_parameter
[, ... ] )
この構文は、1つ以上のインデックスメソッド固有の格納パラメータをデフォルト値に再設定します。
SET
同様、インデックスを完全に更新するためにREINDEX
が必要になる場合があります。
ALTER [ COLUMN ] column_number
SET STATISTICS integer
この構文は、以後のANALYZE操作にむけた、列ごとの統計収集対象を設定します。ただし、式として定義されたインデックス列のみに使えます。 式には一意な名前が無いため、これらはインデックス列の序数を使って参照します。 対象は0から10000の範囲で設定できます。代わりに-1と設定すると、システムのデフォルト統計対象(default_statistics_target)に戻します。 PostgreSQLの問い合わせプランナによる統計の利用についての詳細は14.2を参照してください。
IF EXISTS
インデックスが存在しない場合にエラーとしません。 この場合注意メッセージが発生します。
column_number
インデックス列の順序位置(左から右)を参照する序数。
name
変更対象の既存のインデックスの名前です(スキーマ修飾名も可)。
new_name
インデックスの新しい名前です。
tablespace_name
インデックスの移動先のテーブル空間です。
extension_name
インデックスが依存することになる拡張の名前です。
storage_parameter
インデックスメソッド固有の格納パラメータの名前です。
value
インデックスメソッド固有の格納パラメータの新しい値です。 パラメータに応じてこれが数値になることも文字列になることもあります。
これらの操作はALTER TABLEを使用して行うこともできます。
実際には、ALTER INDEX
は、ALTER TABLE
のインデックス用構文の別名に過ぎません。
以前はALTER INDEX OWNER
という種類の構文がありましたが、(警告の上)無視されるようになりました。
インデックスの所有者は基のテーブルの所有者と異なるものにすることができません。
テーブルの所有者を変更すると自動的にインデックスの所有者も変わります。
システムカタログ用インデックスに対する変更は許されていません。
既存のインデックスの名前を変更します。
ALTER INDEX distributors RENAME TO suppliers;
インデックスを別のテーブル空間に移動します。
ALTER INDEX distributors SET TABLESPACE fasttablespace;
インデックスのフィルファクタを変更します(インデックスメソッドがフィルファクタをサポートしていることを前提とします)。
ALTER INDEX distributors SET (fillfactor = 75); REINDEX INDEX distributors;
式インデックスに対して統計収集対象を設定します。
CREATE INDEX coord_idx ON measured (x, y, (z + t)); ALTER INDEX coord_idx ALTER COLUMN 3 SET STATISTICS 1000;
ALTER INDEX
はPostgreSQLの拡張です。