DROP INDEX — インデックスを削除する
DROP INDEX [ CONCURRENTLY ] [ IF EXISTS ] name
[, ...] [ CASCADE | RESTRICT ]
DROP INDEX
はデータベースシステムから既存のインデックスを削除します。
このコマンドを実行するには、そのインデックスを所有していなければなりません。
CONCURRENTLY
インデックスのテーブルに対して同時に実行される選択、挿入、更新、削除をロックすることなくインデックスを削除します。
通常のDROP INDEX
ではテーブルに対するACCESS EXCLUSIVE
ロックを獲得し、インデックスの削除が完了するまで他のアクセスをブロックします。
このオプションを使うと、競合するトランザクションが完了するまでコマンドは待たされます。
このオプションを使用する時に注意すべき、複数の警告があります。
指定できるインデックス名は1つだけであり、また、CASCADE
オプションはサポートされません。
(したがってUNIQUE
またはPRIMARY KEY
制約をサポートするインデックスをこの方法で削除することはできません。)
また、通常のDROP INDEX
はトランザクションブロックの中で行うことができますが、DROP INDEX CONCURRENTLY
はできません。
最後に、パーティションテーブルのインデックスをこのオプションで削除することはできません。
一時テーブルに対してはDROP INDEX
は常に同時削除ではありません。他のセッションはアクセスできませんし、同時でないインデックス削除の方がより安価だからです。
IF EXISTS
インデックスが存在しない場合でもエラーになりません。 この場合注意メッセージが発行されます。
name
削除するインデックスの名前です(スキーマ修飾名も可)。
CASCADE
そのインデックスに依存しているオブジェクトを自動的に削除し、さらにそれらのオブジェクトに依存するすべてのオブジェクトも削除します(5.14参照)。
RESTRICT
依存しているオブジェクトがある場合、そのインデックスの削除を拒否します。 こちらがデフォルトです。
次のコマンドはインデックスtitle_idx
を削除します。
DROP INDEX title_idx;
DROP INDEX
はPostgreSQLの言語拡張です。
標準SQLにはインデックスに関する規定はありません。