pg_dump — утилита для создания логических бэкапов PostgreSQL. В отличие от физического бэкапа, она выгружает объекты (схемы/данные) в переносимый вид. Дамп, как правило, корректно восстанавливается в такую же или более новую версию Postgres.
✅ Основные сценарии
Бэкап одной базы (plain SQL)
pg_dump mydb > backup.sql
Бэкап с компрессией «на лету» (для plain)
pg_dump mydb | gzip > backup.sql.gz
То же, но со встроенной компрессией (для custom/tar/directory)
pg_dump -Fc -Z 9 mydb > backup.dump
Только схема без данных:
pg_dump -s mydb > schema_only.sql
# или выборочно по схемам:
pg_dump -s -n public -N audit mydb > schema_public.sql
Бэкап конкретной таблицы:
pg_dump -t public.users mydb > users_backup.sql
# исключение таблиц:
pg_dump -T public.logs mydb > no_logs.sql
Параллельный бэкап (работает только с -Fd)
pg_dump -Fd /backups/mydb_$(date +%F) -j 4 mydb
Бэкап всего кластера (все БД + роли/табл.пространства)
pg_dumpall > all_databases.sql
# только «глобалы» (роли, табличные пространства):
pg_dumpall -g > globals.sql
Удаляем бэкапы старше 7 дней (недавний пост про find)
find /backups -type f -name "*.sql.gz" -mtime +7 -delete
👀 Дополнительно
-Fc — custom-формат: компактно, выборочное и параллельное восстановление через pg_restore.-Fd — directory-формат: поддерживает параллельный дамп (-j) и гибкое восстановление.--no-owner --no-privileges — удобно для переноса между серверами/окружениями.--exclude-table-data=... — дамп схем без данных отдельных «тяжёлых» таблиц.⚙️
pg_dump делает снапшот на момент старта дампа, поэтому данные консистентны даже при параллельных транзакциях. Это достигается через механизм MVCC PostgreSQL.Необходимо учесть, что логические дампы не подходят для PITR — для этого нужны физические бэкапы + WAL.
🔘 Связка
pg_dump(-Fc/-Fd) [| gzip] + find -delete — простой и надёжный пайплайн. Но периодически проверяйте восстановление на тестовом стенде и следите за версиями сервера/клиента.#заметкиИнженера
