Бэкап PostgreSQL считается рабочим только после восстановления. Для большинства небольших проектов удобен custom-формат: он сжат, просматривается через pg_restore и позволяет восстанавливать объекты выборочно.
Создание
pg_dump --format=custom --no-owner --file=app-$(date +%F).dump app
pg_restore --list app-$(date +%F).dump | head
sha256sum app-*.dump > SHA256SUMS
Запускайте клиент той же или более новой major-версии, чем сервер. Пароль не размещайте в истории shell: используйте .pgpass, переменную из секрет-хранилища или одноразовый контейнер с secret.
Проверка восстановления
Создайте отдельную пустую базу и не проверяйте дамп поверх production:
createdb -T template0 app_restore_test
pg_restore --exit-on-error --clean --if-exists --no-owner --dbname=app_restore_test app-2026-08-08.dump
psql -X app_restore_test -c "ANALYZE"
psql -X app_restore_test -c "select count(*) from users"
Сверьте критичные таблицы, расширения и несколько реальных запросов приложения. После проверки тестовую базу можно удалить. Роли и tablespace относятся ко всему кластеру и обычным pg_dump не сохраняются; при необходимости отдельно используйте pg_dumpall --globals-only.
Не копируйте каталог PGDATA у работающего сервера обычным архиватором: такой набор файлов может быть несогласованным.
Официальные источники