Быстро пересоздать 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.
Связанные материалы
- Настроить архивирование WAL для pgBackRest (archive-push/archive-get)
- Создать stanza pgBackRest и проверить архивирование (stanza-create/check)
- Снять полный, дифференциальный и инкрементальный бэкапы через pgBackRest
- Показать каталог бэкапов pgBackRest и диапазон архива WAL (info)
- Восстановить последний бэкап через pgBackRest
- Восстановить на момент времени через pgBackRest (PITR, --type=time)