★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 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 INDEX

ALTER INDEX — インデックス定義を変更する

概要

ALTER INDEX [ IF EXISTS ] name RENAME TO new_name
ALTER INDEX [ IF EXISTS ] name SET TABLESPACE tablespace_name
ALTER INDEX name ATTACH PARTITION index_name
ALTER INDEX name DEPENDS ON EXTENSION extension_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 STATISTICS integer
ALTER INDEX ALL IN TABLESPACE name [ OWNED BY role_name [, ... ] ]
    SET TABLESPACE new_tablespace [ NOWAIT ]

説明

ALTER INDEXは既存のインデックスの定義を変更します。 以下のような副構文が存在します。 要求されるロックレベルはそれぞれの副構文によって異なることに注意してください。 特に記述がなければACCESS EXCLUSIVEロックを取得します。 複数のサブコマンドが使われるときは、それらのサブコマンドが要求するうち、もっとも高いレベルのロックを取得します。

RENAME

このRENAME構文は、インデックスの名前を変更します。 インデックスがテーブル制約(UNIQUEPRIMARY KEYEXCLUDEのいずれか)と関連付けられていた場合、制約名も変更されます。 格納されたデータには影響しません。

インデックスの名前の変更には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 INDEXPostgreSQLの拡張です。

関連項目

CREATE INDEX, REINDEX