DBAtlas · Атлас эксплуатации баз данных

Быстро пересоздать standby через delta restore pgBackRest

PostgreSQLБэкап и PITR

Команда

sudo systemctl stop postgresql-16
# Keeps the existing PGDATA and fetches only differing files; writes standby.signal:
sudo -u postgres pgbackrest --stanza=<stanza> --delta --type=standby "--recovery-option=primary_conninfo=host=<primary_host> port=5432 user=replicator application_name=<standby_name>" restore
sudo systemctl start postgresql-16
psql -X -c "SELECT status, sender_host FROM pg_stat_wal_receiver;"

Что делает

--delta сравнивает файлы в существующем PGDATA с бэкапом (размер/время изменения и контрольная сумма) и копирует только отличающиеся; --type=standby записывает standby.signal, а recovery-option добавляет primary_conninfo. Standby сначала догоняет по архиву, затем переключается на потоковую репликацию.

Когда использовать

Чтобы без полного копирования снова сделать репликой отстающий standby, standby с разошедшимся timeline или старый primary, для которого pg_rewind не сработал.

Внимание

Delta заменяет/удаляет отличающиеся или лишние файлы в целевом каталоге файлами из бэкапа; запуск на неверном сервере уничтожит данные этого сервера. pgBackRest отказывается восстанавливать поверх работающего PostgreSQL, но сами убедитесь, что сервис остановлен. Храните пароль в .pgpass, а не в primary_conninfo.

Открыть в DBAtlas →

Связанные материалы