← Назад к вопросам

С каким флагом можно использовать pg_dump, чтобы сжать бэкап

2.0 Middle🔥 131 комментариев
#Базы данных

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Управление сжатием при резервном копировании PostgreSQL с помощью pg_dump

В pg_dump, стандартной утилите для создания логических резервных копий баз данных PostgreSQL, есть несколько флагов для управления сжатием данных, которые можно разделить на две основные категории: встроенное сжатие вывода и использование внешних программ для сжатия.

Основные флаги для сжатия вывода

1. Флаг -Fc и --format=custom (Сжатый пользовательский формат)

Это наиболее рекомендуемый вариант для баланса между степенью сжатия, скоростью и удобством последующего восстановления. Этот формат по умолчанию применяет сжатие с использованием алгоритма zlib.

pg_dump -U username -h localhost -d mydatabase -Fc -f backup.dump
  • Преимущества:
    *   **Автоматическое сжатие**: Файл резервной копии сжимается без дополнительных флагов.
    *   **Восстановление отдельных объектов**: Позволяет выборочно восстанавливать таблицы или схемы с помощью `pg_restore`.
    *   **Параллельное восстановление**: Поддерживает флаг `-j` в `pg_restore` для ускорения процесса.
    *   **Сжатые по умолчанию**: Не требует передачи данных через конвейер.

2. Флаг -Z или --compress (Указание уровня сжатия)

Этот флаг используется в паре с -Fc (обычный формат) или -Ft (формат tar) для задания уровня сжатия от 0 до 9.

pg_dump -U username -d mydatabase -Fc -Z 6 -f backup_compressed.dump
  • Уровни:
    *   **`-Z 0`** или `--compress=0`: Отключает сжатие (только для форматов `-Fc`/`-Ft`).
    *   **`-Z 1`** ... `-Z 9`: Устанавливает уровень сжатия, где 1 — самое быстрое, но наименее эффективное сжатие, а 9 — самое медленное, но наиболее агрессивное.
    *   **Уровень по умолчанию**: Обычно равен 1 для `-Fc`.

Использование внешних утилит сжатия через конвейер

Это классический Unix-way, который предоставляет максимальную гибкость в выборе алгоритма сжатия, но требует более сложного синтаксиса командной строки.

3. Сжатие с помощью gzip (стандартное)

Вывод pg_dump перенаправляется (|) в утилиту gzip. Это особенно полезно при использовании формата plain SQL (-Fp или по умолчанию).

pg_dump -U username -d mydatabase | gzip -9 > backup.sql.gz
  • Ключ -9 для gzip задает максимальную степень сжатия (аналогично -Z 9).
  • Для восстановления потребуется сначала распаковать файл:
    gunzip -c backup.sql.gz | psql -U username -d restored_db
    

4. Сравнение с другими алгоритмами

Для еще лучшего сжатия (за счет больших вычислительных затрат) можно использовать bzip2 или современный zstd.

# Использование bzip2 (лучшее сжатие, но очень медленно)
pg_dump -d mydatabase | bzip2 > backup.sql.bz2

# Использование zstd (отличный баланс скорости и степени сжатия)
pg_dump -d mydatabase | zstd -10 -T0 -o backup.sql.zst
  • -T0 в zstd позволяет использовать все доступные ядра CPU.

Стратегия выбора метода сжатия

Выбор зависит от конкретных требований:

  • Для ежедневных бэкапов с возможностью selective restore: Используйте -Fc (с уровнем -Z 6 как хороший компромисс). Это стандарт де-факто в индустрии.
  • Для максимального сжатия архивных копий (где скорость не критична): Используйте конвейер с bzip2 или zstd на высоких уровнях, но помните о формате (-Fp).
  • Для быстрых бэкапов больших баз (где важна скорость): Используйте -Fc -Z 1 или даже -Fd (формат каталога) с последующим параллельным сжатием файлов.
  • Для обеспечения максимальной совместимости (бэкап может восстанавливаться на другой машине без установки дополнительных утилит): Используйте встроенный режим -Fc.

Важное замечание о формате каталога (-Fd)

Флаг -Fd создает резервную копию в виде каталога с отдельными файлами для каждой таблицы. Его тоже можно сжимать:

pg_dump -U username -d mydatabase -Fd -Z -f /path/to/backup_dir/

Ключ -Z здесь также включает сжатие для каждого файла в каталоге с уровнем по умолчанию.

Итог: Наиболее универсальным и часто используемым способом получить сжатый бэкап является команда pg_dump -Fc -Z [уровень] -f файл.dump. Она обеспечивает оптимальный баланс между размером бэкапа, скоростью создания/восстановления и функциональностью для администрирования.

С каким флагом можно использовать pg_dump, чтобы сжать бэкап | PrepBro