Представьте, что в базе данных PostgreSQL есть таблица на 50 миллионов строк. Нужно добавить новую колонку со значением по умолчанию: ALTER TABLE users ADD COLUMN status VARCHAR DEFAULT 'active'. Какие риски для продакшена следует учитывать?

В PostgreSQL 11+ постоянный DEFAULT 'active' обычно добавляется без переписывания всех 50 млн строк. Однако ALTER TABLE всё равно требует сильной блокировки и может остановить конкурирующие запросы.

Короткий ответ

Что ответить на собеседовании

В PostgreSQL 11+ постоянный DEFAULT 'active' обычно добавляется без переписывания всех 50 млн строк. Однако ALTER TABLE всё равно требует сильной блокировки и может остановить конкурирующие запросы.

Подробный разбор

Ответ с пояснениями

В PostgreSQL 11+ постоянный DEFAULT 'active' обычно добавляется без переписывания всех 50 млн строк. Однако ALTER TABLE всё равно требует сильной блокировки и может остановить конкурирующие запросы.

Значение для старых строк хранится в метаданных и подставляется при чтении, поэтому размер таблицы сам по себе не делает операцию долгим backfill. Главный риск — ожидание ACCESS EXCLUSIVE за долгими транзакциями и очередь запросов позади неё. Уточните версию, проверьте blockers и задайте небольшой lock_timeout для безопасного повторного запуска. Volatile default может потребовать переписывания. Также проверьте совместимость приложения и репликацию; «быстрое добавление» не равно «гарантированно без паузы».

Источник: www.postgresql.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее