Ответ
В DevOps-практике я настраиваю не разовые бэкапы, а отказоустойчивый автоматизированный пайплайн. Для этого комбинирую логические и физические бэкапы.
1. Логические бэкапы с pg_dump для гибкости:
Использую для средних БД и возможности быстрого восстановления отдельных таблиц. Автоматизирую через cron или систему оркестрации (например, Jenkins).
# Ежедневный бэкап с сжатием и меткой времени
pg_dump -U postgres -d app_db -Fc | gzip > /backup/psql/app_db_$(date +%Y%m%d).dump.gz
# Проверка целостности архива
pg_restore -l /backup/psql/app_db_$(date +%Y%m%d).dump.gz > /dev/null && echo "Backup OK"
2. Непрерывное архивирование WAL (Write-Ahead Logging) для Point-in-Time Recovery (PITR):
Это критично для production. Настраиваю в postgresql.conf:
wal_level = replica
archive_mode = on
archive_command = 'gzip < %p > /backup/wal_archive/%f.gz'
В сочетании с периодическим pg_basebackup это позволяет восстановить БД на любой момент времени.
3. Интеграция с облачным хранилищем и мониторинг: Скрипт загружает свежий бэкап в S3 (или другой объектный сторадж) с lifecycle-политиками, а также отправляет уведомление в Slack/Telegram в случае сбоя. Восстановление отрабатывается как часть runbook'а для аварийных ситуаций (Disaster Recovery).