pg_dump

  • По умолчанию pg_dump создаёт plain SQL-файл, который можно восстановить с помощью psql

Backup данных кластера ^psql-pgdump-fullStandby

### дамп в plain SQL
# pg_dump -U имя_пользователя -h хост -p порт имя_базы > backup.sql
  pg_dump -U postgres -h localhost -p 5432 mydb > mydb_backup.sql
 
### Дамп в формате custom (двоичный, сжатый)
pg_dump -U postgres -h localhost -F c -b -v -f mydb_backup.custom mydb
#   -F c — custom format
#	-b — включить большие объекты (BLOB)
#	-v — подробный вывод
#	-f — указать файл вывода
 
### Только структура (без данных)
pg_dump -U postgres --schema-only mydb > schema_only.sql
 
### Только данные (без DDL)
pg_dump -U postgres --data-only mydb > data_only.sql

Восстановление из SQL-дампа

# Убедитесь, что база `mydb` уже существует! Если нет — создайте:
createdb -U postgres mydb
 
### plain SQL-файла
psql -U postgres -h localhost -d mydb < backup.sql
 
#Или интерактивно:
	psql -U postgres -d mydb
	\i backup.sql
	\q
 
 

pg_dumpall

### Дамп всех баз данных
pg_dumpall -U postgres > all_databases.sql
# Восстановить
createdb -U postgres mydb_restored
psql -U postgres -d mydb_restored < mydb_full.sql

pg_dump кастомные форматы + pg_restore

Характеристикаpg_dump — plain SQL (-F p)pg_dump — custom (-F c)pg_dump — tar (-F t)pg_dump — directory (-F d)pg_restore
Тип файлаТекстовый SQL-скриптДвоичный архив (один файл)TAR-архив (ограниченная структура)Каталог с множеством файловУтилита для восстановления из архивов
Читаемость✅ Человекочитаемый❌ Нет❌ Нет (но можно распаковать как tar)❌ Нет (множество двоичных файлов)
Создаётся черезpg_dump db > file.sql
или -F p
pg_dump -F c -f file.db dbpg_dump -F t -f file.tar dbpg_dump -F d -f dir/ db
Восстанавливается черезpsql -f file.sqlpg_restore -d db file.dbpg_restore -d db file.tarpg_restore -d db dir/Только с -F c, -F t, -F d
Поддержка частичного восстановления❌ Нет (только ручной фильтр)✅ Да (-t, -n, -T, -N и др.)✅ Да (но с ограничениями)✅ Да✅ Основная функция
Параллельное восстановление❌ Нет✅ Да (-j N)❌ Нет✅ Да (-j N)Поддерживает -j только для -F c и -F d
Поддержка больших объектов (BLOB)✅ Да (через COPY или SELECT)✅ Полная⚠️ Ограничена (до 8 ГБ на объект)✅ Полная✅ Да
Сжатие❌ Нет (но можно gzip вручную)✅ Встроено (уровень по умолчанию)❌ Нет✅ Встроено (на уровне файлов)
Макс. размер объектаНе ограниченНе ограничен≤ 8 ГБ на объектНе ограничен
Использование в продакшенеДля простых задач, миграций, отладки✅ Рекомендуется для резервного копированияРедко (устаревший)✅ Для очень больших БД✅ Обязателен для работы с архивами
Просмотр содержимого без восстановленияОткрыть в редактореpg_restore -l file.dbpg_restore -l file.tarpg_restore -l dir/✅ Команда -l (list)
pg_restore - не работает с plain SQL.

Основные ключи pg_dump для частичного резервного копирования

КлючНазначениеПример
-t, --table=ИМЯСохранить только указанную таблицу (можно использовать шаблоны: *, ?)pg_dump -t users mydb > users.sql
-T, --exclude-table=ИМЯИсключить указанную таблицу из дампаpg_dump -T logs mydb > no_logs.sql
-n, --schema=ИМЯСохранить только объекты из указанной схемыpg_dump -n sales mydb > sales.sql
-N, --exclude-schema=ИМЯИсключить всю схему из дампаpg_dump -N audit mydb > no_audit.sql
-s, --schema-onlyСохранить только структуру (без данных)pg_dump -s mydb > schema.sql
-a, --data-onlyСохранить только данные (без DDL)pg_dump -a mydb > data.sql
--section=SECTIONВыгрузить только определённую секцию: pre-data, data, post-datapg_dump --section=data mydb > data_only.sql
--insertsГенерировать INSERT вместо COPY (медленнее, но переносимее)pg_dump --inserts -t users mydb
--column-insertsГенерировать INSERT с указанием колонок (полезно при изменении схемы)pg_dump --column-inserts -t users mydb

Основные ключи pg_restore для частичного восстановления

КлючНазначениеПример
-t, --table=ИМЯВосстановить только указанную таблицуpg_restore -t users ...
-T, --exclude-table=ИМЯИсключить указанную таблицуpg_restore -T logs ...
-n, --schema=ИМЯВосстановить только объекты из схемыpg_restore -n public ...
-N, --exclude-schema=ИМЯИсключить всю схемуpg_restore -N audit ...
-P, --function=ИМЯ(АРГУМЕНТЫ)Восстановить конкретную функциюpg_restore -P "get_user(int)" ...
-I, --index=ИМЯВосстановить только указанный индексpg_restore -I idx_users_email ...
-S, --superuser=ИМЯУказать суперпользователя для DDL-команд (редко используется)
-l, --listВывести список всех объектов в архиве (для анализа)pg_restore -l backup.db > contents.txt
--section=SECTIONВосстановить только определённую секцию: pre-data, data, post-datapg_restore --section=data ...
  • Все эти ключи работают только с архивными форматами (-F c, -F t, -F d). Для plain SQL (-F p) они не работают — там только ручной фильтр через grep/sed.