Допустимая потеря данных, pg_dump, PITR, секции и переход между версиями
Резервная копия полезна только тогда, когда из неё можно восстановить нужные
данные за допустимое время. Успешная команда pg_dump ещё не доказывает, что
файл полный, доступен и подходит новой версии окружения.
Перед выбором способа копирования задают две цели:
Ежедневная копия без журнала даёт возможную потерю почти суток. Большая копия, которая восстанавливается 12 часов, не подходит сервису с RTO 2 часа.
pg_dump читает одну базу и записывает её логическое содержимое: команды и
данные для создания объектов. Обычная работа читателей и писателей при этом
продолжается.
pg_dump не включает общекластерные роли и табличные пространства. Их нужно
сохранять и описывать отдельно, как и расширения и соответствие владельцев.
Форматы custom и directory восстанавливаются через pg_restore. Формат
directory поддерживает параллельное создание копии и восстановление.
Логическая копия удобна для отдельных баз и переноса между версиями, но на очень большом объёме восстановление может быть долгим.
Физическая копия сохраняет файлы всего кластера PostgreSQL. Вместе с
непрерывным архивом WAL она позволяет восстановить состояние на выбранный
момент. Этот процесс называют PITR (Point-in-Time Recovery).
Полная цепочка состоит из следующих частей:
pg_verifybackup;recovery.signal, команда получения WAL и целевой момент;pg_verifybackup находит часть повреждений, но не заменяет настоящий запуск
восстановленного сервера и проверку данных.
Тренировку никогда не начинайте с очистки неизвестного каталога на сервере. Учебная лаборатория использует только отдельный именованный том Docker.
Секционирование (partitioning) делит одну логическую таблицу на физические
части по ключу, например по месяцу occurred_at. Запрос по этому ключу может
отбросить ненужные секции ещё при планировании.
Главная польза часто связана с обслуживанием. Секцию старого месяца можно
отсоединить, архивировать и позже удалить, не выполняя DELETE для каждой
строки.
Будущие секции создают заранее. Секция по умолчанию принимает строки, которые не попали в известные границы, но её нужно контролировать: накопленные там строки могут помешать добавить новую границу.
ATTACH, DETACH и DROP меняют структуру и берут блокировки. Даже быстрая
операция с метаданными может долго ждать текущую нагрузку. Вариант
DETACH ... CONCURRENTLY имеет ограничения, которые проверяют на версии курса.
Дополнительный выпуск (minor release) сохраняет основную версию, например
18.3 → 18.4. Обычно он требует заменить исполняемые файлы и перезапустить сервер
по примечаниям к выпуску.
Основное обновление (major upgrade) меняет первую часть версии, например
17 → 18. Для него используют pg_upgrade, логическую репликацию или
dump/restore.
До основного обновления проверьте:
ANALYZE после переноса;Обновление сначала полностью репетируют на копии, включая переключение приложения и возврат при ошибке.
В лаборатории 27 вы проверите направление строки в нужную секцию и соберёте их список. Отдельная тренировка восстановления создаёт логическую копию, восстанавливает её в другую базу и сравнивает данные.
Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.
Далее: Репликация, пулы соединений и итоговый проект