Ответ
Для сжатия резервных копий 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) в скриптах, избегая зависимостей от переменных окружения по умолчанию.