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

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

Ответ

Для сжатия резервных копий PostgreSQL с помощью pg_dump есть два основных подхода:

1. Использование кастомного формата (-Fc) со встроенным сжатием: Это наиболее эффективный и рекомендуемый способ, так как создаёт сжатый архив, который можно selectively восстанавливать через pg_restore.

# Базовое сжатие (уровень по умолчанию ~6)
pg_dump -Fc my_database > backup.dump

# С максимальным сжатием (уровень 9)
pg_dump -Fc -Z9 my_database > backup_max.dump

2. Потоковое сжатие внешним утилитом (gzip, pigz): Классический метод, особенно если нужен простой сжатый SQL-файл.

# С использованием gzip
pg_dump my_database | gzip > backup.sql.gz

# С использованием pigz (многопоточное сжатие, быстрее для больших БД)
pg_dump my_database | pigz -9 > backup.sql.gz

Рекомендация для DevOps-пайплайна: Используйте pg_dump -Fc для гибкости восстановления. Включите проверку целостности дампа после создания:

pg_restore -l backup.dump > /dev/null && echo "Dump is valid"

И всегда указывайте полный хост, порт и роль (-h, -p, -U) в скриптах, избегая зависимостей от переменных окружения по умолчанию.