Edited at

PostgreSQLでINDEXをテーブルロックしないで作りなおす

PostgreSQLのREINDEXでは実行中にテーブルロックが発生します。これを回避するには、CREATE INDEXCONCURRENTLYを指定します。また、この操作はShareLockを取得するので同じテーブルに対して同時に実行するとDeadLockとなるので注意が必要。


一時インデックスを作成

CREATE INDEX CONCURRENTLY idx_new ON tbl (i);


古いインデックスを捨てる

DROP INDEX idx_old