@nadirku
Backend bro

Как реализовать миграцию больших таблиц без блокировок?

Есть относительно большая таблица с 5+ миллионов строк.
Задача: изменить структуру таблицы, добавив к примеру столбец, и при этом избежать блокировок таблицы.
В таблицу постоянно идут запросы как на запись так и на чтение.
Есть ли какие-то методики или инструменты, которые позволяют правильно делать такие миграции с минимальным даунтаймом? Данные конечно же терять нельзя.

Временные таблицы, вынужденный даунтайм? Какие есть варианты?
  • Вопрос задан
  • 144 просмотра
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Можно я сошлюсь на своё сочинение на SO? https://ru.stackoverflow.com/q/721985/203622

Впрочем пару слов добавлю:
добавив к примеру столбец

Важно какой именно. Если default null - просто берёте и добавляете со statement_timeout в 1 секунду. alter table всё равно возьмёт блокировку на таблицу, но default null поле - это лишь быстрое обновление системного каталога.
Если другой default - то для pg11 просто берёте и добавляете с таймаутом, для более старых немного приключений.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы