最近、PostgreSQL を使用している Rails プロジェクトでCREATE INDEX CONCURRENTLYする機会があったのでメモ。 CREATE INDEX CONCURRENTLY とは 通常のインデックス作成処理では、処理が完了するまで対象テーブルへの書き込みはロックされる(読み取りはロックされない)。 そしてテーブルのレコードが大量にある場合、インデックス作成に数時間かかることも考えられるので、その間ずっと書き込みがロックされるのはツラい。 PostgreSQL は CREATE INDEXでCONCURRENTLYというオプションをサポートしており、書き込みのロックを行わずにインデックスを作成することが可能。 ただし、これはサービスのダウンタイムが回避できる代わりに、通常よりも処理に時間がかかり、負荷も上がることが考えられる。 またここでは CREATE INDEX