Con plain CREATE INDEX
, la tabla se bloqueará para escrituras pero no para lecturas.
Use CREATE INDEX CONCURRENTLY
para evitar bloqueos de escritura también.
De los documentos de PostgreSQL enCREATE INDEX
:
Cuando se usa esta opción, PostgreSQL construirá el índice sin tomar ningún bloqueo que evite inserciones, actualizaciones o eliminaciones concurrentes en la tabla; mientras que una compilación de índice estándar bloquea las escrituras (pero no las lecturas) en la tabla hasta que se realiza. Hay varias advertencias a tener en cuenta al usar esta opción: consulte Creación de índices concurrentes .
Y más específicamente (como comentó @ypercube ):
PostgreSQL admite la creación de índices sin bloquear las escrituras . Este método se invoca especificando la CONCURRENTLY
opción de CREATE INDEX
. Cuando se utiliza esta opción, PostgreSQL debe realizar dos escaneos de la tabla y, además, debe esperar a que finalicen todas las transacciones existentes que podrían utilizar el índice. Por lo tanto, este método requiere más trabajo total que una compilación de índice estándar y lleva mucho más tiempo completarlo. Sin embargo, dado que permite que las operaciones normales continúen mientras se construye el índice, este método es útil para agregar nuevos índices en un entorno de producción.
El énfasis audaz es mío.