回答:
plain CREATE INDEX
では、テーブルは書き込み用にロックされますが、読み取り用にはロックされません。
CREATE INDEX CONCURRENTLY
書き込みロックも回避するために使用します。
上CREATE INDEX
のPostgreSQLドキュメントから:
このオプションを使用すると、PostgreSQLは、テーブルの同時挿入、更新、または削除を妨げるロックを取得せずにインデックスを構築します。一方、標準のインデックスビルドは、完了するまでテーブルへの書き込みをロックアウトします(読み取りはロックしません)。このオプションを使用する場合は、いくつかの注意点があります。「インデックスの同時作成」を参照してください。
そして、より具体的に(同様にコメントし@ypercube):
PostgreSQLは書き込みをロックアウトせずにインデックスの構築をサポートしています。このメソッドは、の
CONCURRENTLY
オプションを指定することによって呼び出されますCREATE INDEX
。このオプションを使用する場合、PostgreSQLはテーブルの2つのスキャンを実行する必要があり、さらに、インデックスを使用して終了する可能性のある既存のトランザクションをすべて待機する必要があります。したがって、この方法では、標準のインデックス作成よりも多くの作業が必要であり、完了するまでに大幅に時間がかかります。ただし、インデックスが作成されている間も通常の操作を続行できるため、この方法は本番環境に新しいインデックスを追加する場合に役立ちます。
大胆な強調鉱山。