ITLB.Поиск

Как сделать и проверить резервную копию PostgreSQL

Сделайте дамп через pg_dump, восстановите его в отдельную базу и проверьте данные запросами.

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

Подготовьте доступ и место

Вам понадобится роль с доступом на чтение нужных таблиц и каталог с достаточным свободным местом. Для пароля используйте штатный механизм клиента PostgreSQL или интерактивный ввод; держите пароль вне команды и истории терминала. Проверьте версии клиента и сервера: pg_dump не работает с сервером более новой основной версии, чем сам клиент. Для планового бэкапа проще взять инструменты той же основной версии.

Сделайте дамп

Формат -Fc позволяет просмотреть список объектов и восстановить их с помощью pg_restore. В примере имя базы — app_db; параметры сервера и роли задайте в своём окружении PostgreSQL.

pg_dump -Fc -f app-db.dump app_db
pg_restore --list app-db.dump

Успешный список объектов подтверждает, что файл читается, но ещё не доказывает, что база запускается. Дамп содержит данные пользователей; ограничьте доступ и храните отдельную копию вне диска рабочего сервера. Логический дамп PostgreSQL одной базы не включает общесерверные роли и определения табличных пространств.

Восстановите копию отдельно

Используйте тестовый сервер или одноразовую базу с отдельным именем. Не подключайте к ней рабочее приложение. Пример для тестовой среды, в которой уже доступны нужные расширения:

createdb app_restore_test
pg_restore --exit-on-error --no-owner --no-privileges -d app_restore_test app-db.dump
psql -d app_restore_test -c '\dt'

Проверьте ключевые таблицы и несколько ожидаемых записей, а затем запустите тестовую версию приложения. Здесь владельцы и права намеренно пропускаются, поэтому такой прогон проверяет структуру и данные. Если при аварии нужно вернуть исходные роли и права, подготовьте их отдельно и отрепетируйте полный сценарий.

Проверьте время и допустимые потери

Запишите длительность восстановления и время последней записи в копии. Если дамп делается раз в сутки, при аварии между копиями можно потерять изменения почти за сутки. Когда это недопустимо, нужна схема с архивированием WAL и восстановлением на нужный момент времени. Дамп всё равно может быть удобен для переноса отдельных баз.

Частые вопросы

Можно ли копировать каталог работающего контейнера?

Обычное копирование файлов работающего PostgreSQL не гарантирует согласованную копию. Используйте pg_dump или штатный инструмент физического бэкапа PostgreSQL.

Почему часть объектов есть, а приложение не запускается?

Проверьте версии расширений, права роли приложения и внешние хранилища. Например, ссылки на загруженные файлы могут быть в БД, а сами файлы — в отдельном томе.