Как Materialized View может повесить продакшен Ты создал… — SQL Academy: всё о реляционных БД и SQL — TG.ME

🛑 Как Materialized View может повесить продакшен

Ты создал материализованное представление, чтобы ускорить тяжёлые запросы. Но в момент обновления данных приложение вдруг замирает, а пользователи видят бесконечную загрузку.

⚙️ Почему всё зависло
Обычная команда REFRESH MATERIALIZED VIEW работает очень грубо.
🔹 Она вешает эксклюзивную блокировку. База полностью запрещает чтение, пока собирает новые данные. Это как закрыть магазин на переучёт — внутрь никого не пускают.

🚀 Как обновить без даунтайма
Чтобы отдавать пользователям старые данные, пока база в фоне строит новые, используй эту команду:
REFRESH MATERIALIZED VIEW CONCURRENTLY my_report;


⚠️ Главный подвох
Слово CONCURRENTLY не сработает просто так. Базе нужно точно понимать, как сопоставлять старые и новые строки при фоновом обновлении.
🔸 Обязательное условие: на вьюшке должен быть создан уникальный индекс (например, по ID). Без него запрос завершится с ошибкой.
CREATE UNIQUE INDEX ON my_report (id);


💡 Уникальный индекс плюс обновление в фоне — и пользователи больше не увидят зависаний.
👍9🔥3🤯2
August 26, 2026 2.1K 8