С обычным CREATE INDEX
, таблица будет заблокирована для записи, но не для чтения.
Используйте также, CREATE INDEX CONCURRENTLY
чтобы избежать блокировки записи.
Из документации PostgreSQLCREATE INDEX
:
Когда используется эта опция, PostgreSQL будет строить индекс без каких-либо блокировок, которые предотвращают одновременные вставки, обновления или удаления в таблице; тогда как стандартная сборка индекса блокирует записи (но не чтения) в таблицу, пока это не будет сделано. Есть несколько предостережений, о которых следует помнить при использовании этой опции - см. Построение индексов одновременно .
И более конкретно (как прокомментировал @ypercube ):
PostgreSQL поддерживает построение индексов без блокировки записи . Этот метод вызывается указанием CONCURRENTLY
опции CREATE INDEX
. Когда используется эта опция, PostgreSQL должен выполнить два сканирования таблицы и, кроме того, он должен дождаться завершения всех существующих транзакций, которые могут потенциально использовать индекс для завершения. Таким образом, этот метод требует больше общей работы, чем стандартное построение индекса, и занимает значительно больше времени. Однако, поскольку он позволяет продолжить нормальные операции во время построения индекса, этот метод полезен для добавления новых индексов в производственной среде.
Жирный акцент мой.