В PostgreSQL 11+ постоянный DEFAULT 'active' обычно добавляется без переписывания всех 50 млн строк. Однако ALTER TABLE всё равно требует сильной блокировки и может остановить конкурирующие запросы.
Представьте, что в базе данных 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 всё равно требует сильной блокировки и может остановить конкурирующие запросы.
Значение для старых строк хранится в метаданных и подставляется при чтении, поэтому размер таблицы сам по себе не делает операцию долгим backfill. Главный риск — ожидание ACCESS EXCLUSIVE за долгими транзакциями и очередь запросов позади неё. Уточните версию, проверьте blockers и задайте небольшой lock_timeout для безопасного повторного запуска. Volatile default может потребовать переписывания. Также проверьте совместимость приложения и репликацию; «быстрое добавление» не равно «гарантированно без паузы».
Источник: www.postgresql.org.