Ответ
Custom format (формат -Fc) в утилите pg_dump PostgreSQL — это гибкий бинарный формат дампа, специально разработанный для pg_restore. В отличие от plain SQL-дампа (-Fp), он предоставляет DevOps-инженеру больше контроля над процессом резервного копирования и восстановления.
Преимущества custom format для задач DevOps:
- Сжатие: Файлы дампа автоматически сжимаются, что экономит место в хранилище (S3, объектное хранилище).
- Параллельное восстановление: Можно значительно ускорить восстановление больших БД за счет использования нескольких потоков.
pg_restore -j 4 -d my_new_db backup.dump - Выборочное восстановление: Восстановление не всей БД, а отдельных объектов (таблиц, схем, индексов), что полезно для извлечения данных после ошибки.
# Восстановить только схему public pg_restore -j 4 -d my_db -n public backup.dump # Восстановить только конкретную таблицу pg_restore -j 4 -d my_db -t my_table backup.dump - Восстановление в транзакции: По умолчанию
pg_restoreдля custom format использует одну транзакцию, что обеспечивает целостность данных — либо восстановится всё, либо ничего (в случае ошибки).
Типичный пайплайн резервного копирования в DevOps:
# 1. Создание дампа в custom format с указанием хоста и роли
pg_dump -h $DB_HOST -U $DB_USER -Fc -f /tmp/backup_$(date +%Y%m%d).dump $DB_NAME
# 2. Проверка целостности дампа (просмотр содержимого)
pg_restore -l /tmp/backup.dump | head -20
# 3. Загрузка в надежное хранилище (например, S3)
aws s3 cp /tmp/backup.dump s3://my-backup-bucket/
# 4. Очистка локального файла
rm /tmp/backup.dump
Важно: Для восстановления из custom format обязательно требуется утилита pg_restore. Восстановить дамп, просто подав его в psql, как с plain SQL, не получится.