З простою CREATE INDEX
таблицею буде заблоковано для запису, але не для читання.
Використовуйте також, CREATE INDEX CONCURRENTLY
щоб уникнути блокування запису.
З документів PostgreSQL проCREATE INDEX
:
При використанні цієї опції PostgreSQL будує індекс, не беручи жодних блокувань, які запобігають одночасному вкладенню, оновленням або видаленню в таблиці; тоді як стандартна збірка індексу блокує записи (але не зчитування) на столі, поки це не буде зроблено. Існує кілька застережень, про які слід пам’ятати, використовуючи цю опцію - див. Створення індексів одночасно .
І конкретніше (як @ypercube коментує ):
PostgreSQL підтримує побудову індексів без блокування записів . Цей метод викликається, вказавши CONCURRENTLY
опцію CREATE INDEX
. Коли використовується цей параметр, PostgreSQL повинен виконати два сканування таблиці, а крім того, він повинен чекати, коли всі існуючі транзакції, які потенційно можуть використовувати індекс, припиняються. Таким чином, цей метод вимагає більше загальної роботи, ніж стандартна збірка індексу і займає значно більше часу. Однак, оскільки він дозволяє продовжувати нормальні операції під час побудови індексу, цей метод корисний для додавання нових індексів у виробниче середовище.
Сміливий акцент мій.