Что такое custom format в pg_dump?

«Что такое custom format в pg_dump?» — вопрос из категории Базы данных, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Custom format (формат -Fc) в утилите pg_dump PostgreSQL — это гибкий бинарный формат дампа, специально разработанный для pg_restore. В отличие от plain SQL-дампа (-Fp), он предоставляет DevOps-инженеру больше контроля над процессом резервного копирования и восстановления.

Преимущества custom format для задач DevOps:

  1. Сжатие: Файлы дампа автоматически сжимаются, что экономит место в хранилище (S3, объектное хранилище).
  2. Параллельное восстановление: Можно значительно ускорить восстановление больших БД за счет использования нескольких потоков.
    pg_restore -j 4 -d my_new_db backup.dump
  3. Выборочное восстановление: Восстановление не всей БД, а отдельных объектов (таблиц, схем, индексов), что полезно для извлечения данных после ошибки.
    # Восстановить только схему public
    pg_restore -j 4 -d my_db -n public backup.dump
    # Восстановить только конкретную таблицу
    pg_restore -j 4 -d my_db -t my_table backup.dump
  4. Восстановление в транзакции: По умолчанию 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, не получится.