PostgreSQL

Бэкап есть. А восстановиться получится?

Файл резервной копии — ещё не гарантия сохранности данных. Проверка заканчивается там, где база восстановлена, приложение читает нужные таблицы, а время восстановления укладывается в ваши требования.

7 мин чтения

Обновлено 15 октября 2026 · Редакция Medloft

Что именно сохраняем

Логический дамп удобен для отдельной базы: его можно перенести на другой сервер и восстановить выборочно. Но pg_dump не сохраняет роли всего кластера и не заменяет архивирование WAL для восстановления на произвольный момент времени.

Заранее опишите допустимую потерю данных (RPO) и время восстановления (RTO). Ежесуточный дамп может оказаться недостаточным даже при полностью исправной копии.

Минимальный тест в изолированной базе

Ниже учебный пример. app — исходная база, а restore_check — отдельная пустая база в тестовом окружении. Учётные данные передаются средствами PostgreSQL; пароль не нужно записывать в команду.

pg_dump --format=custom --file=app.dump --dbname=app
createdb --template=template0 restore_check
pg_restore --exit-on-error --no-owner --no-privileges \
  --dbname=restore_check app.dump
psql -X --set=ON_ERROR_STOP=on --dbname=restore_check \
  --command='SELECT count(*) FROM public.orders;'

Режим без владельцев и привилегий подходит для изолированного теста содержимого. Для аварийного восстановления отдельно проверьте роли, права, расширения и настройки подключения приложения.

Что считать успешной проверкой

  • Создание дампа и восстановление завершились с нулевым кодом возврата.
  • Нужные схемы и таблицы существуют, контрольные запросы проходят.
  • Изолированное приложение выполняет основные операции.
  • Известны длительность восстановления, размер копии и её возраст.

Сравнивать количество строк с работающей исходной базой без учёта времени снимка некорректно: данные продолжают меняться. Используйте согласованные контрольные показатели или заранее определённые инварианты.

Как превратить проверку в процесс

Запускайте тест по расписанию, сохраняйте результат вне тестового сервера и уведомляйте об отсутствии свежего успешного запуска. Защищайте копии так же, как исходные данные. Отдельно проверяйте доступ к хранилищу при потере основного сервера.

Полезный результат

Последняя проверенная копия, время её создания, время восстановления и список пройденных проверок. Так на вопрос «мы восстановимся?» можно ответить предметно.

Документация и источники

Примеры иллюстративные. Имена сервисов и баз условные; команды и параметры нужно адаптировать к своему окружению.

← Все заметкиНовые статьи через RSS ↗

Рядом по теме

Все темы ↗