Обновление PostgreSQL на новую мажорную версию
Вопрос
Интервьюер: «Нужно обновить продовый PostgreSQL 13 на 17, база 2 ТБ, простой не больше 10 минут. Ваш план?»
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Варианты: pg_upgrade --link с коротким простоем или логическая репликация в новый кластер
Подготовка: совместимость расширений, приложения и драйверов, репетиция на копии
Логическая репликация: схема, publication и subscription, догонка, проверка лага
Переключение: остановка записи, синхронизация последовательностей, перевод приложений
План отката и наблюдение после переключения
Обновить статистику (ANALYZE) после переезда
Что могут спросить следом
- Какие объекты не переносит логическая репликация?
- Как откатиться, если после переключения нашли проблему?
Разбор
Образцовый ответ: «Для 10 минут простоя беру логическую репликацию. Сначала репетиция на копии: проверяю расширения, планы ключевых запросов на 17-й версии, драйверы приложения. Поднимаю новый кластер 17, переношу схему через pg_dump --schema-only, создаю publication на старом и subscription на новом, жду начальную синхронизацию и нулевой лаг. Логическая репликация не переносит последовательности и DDL, поэтому в окне: останавливаю запись (PgBouncer pause), жду догонки, выставляю значения последовательностей, переключаю PgBouncer на новый кластер, снимаю паузу. Это минуты. Для отката могу настроить обратную логическую репликацию с нового на старый, чтобы в первые часы вернуться без потери данных. После переезда ANALYZE по всей базе, иначе первые часы планировщик без статистики».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.