POSTGRESQL
#postgresql#backup#pg_dump#pg_restore#database

PostgreSQL: pg_dump и pg_restore — бэкап и восстановление

Резервное копирование и восстановление одной БД через pg_dump и pg_restore. Строго по официальной документации PostgreSQL. Копируй — вставляй — работает.

Как использовать

  1. Замени dbname, mydb, backup.sql и пути на свои.
  2. Полный дамп одной БД: pg_dump dbname > backup.sql.
  3. Восстановление: psql -d mydb -f backup.sql (plain) или pg_restore -d mydb backup.dump (custom/directory/tar).

Резервное копирование одной базы данных через pg_dump и восстановление через psql или pg_restore. По PostgreSQL Backup and Restore и pg_dump.

Важно: pg_dump не блокирует других пользователей; дамп согласован на момент старта. Для одной БД — pg_dump; для всего кластера и ролей — pg_dumpall.


1. Plain SQL (текстовый дамп)

Универсальный формат: обычный SQL-файл. Восстанавливается через psql.

# Дамп одной БД в файл
pg_dump dbname > backup.sql

# Только схема (без данных)
pg_dump -s dbname > schema.sql

# Сжатие на лету
pg_dump dbname | gzip > backup.sql.gz

Восстановление:

# Создай БД, если её нет
createdb -U postgres mydb

# Восстановление из plain SQL
psql -d mydb -f backup.sql

# Из сжатого
gunzip -c backup.sql.gz | psql -d mydb -f -

2. Custom / Directory / Tar (форматы для pg_restore)

Форматы, которые восстанавливаются только через pg_restore. Позволяют выборочно восстанавливать объекты и распараллеливать.

# Custom format (один файл .dump) — рекомендуется
pg_dump -Fc dbname > backup.dump

# Directory format (каталог с файлами) — можно распараллелить
pg_dump -Fd dbname -f backup_dir

# Tar format
pg_dump -Ft dbname > backup.tar

Восстановление из custom-архива:

# В существующую БД (объекты добавляются; при конфликтах — ошибки)
pg_restore -d mydb backup.dump

# Очистить БД перед восстановлением (осторожно!)
pg_restore -d mydb --clean --if-exists backup.dump

# Только схема
pg_restore -s -d mydb backup.dump

Из directory с параллельными заданиями:

pg_restore -d mydb -j 4 backup_dir

3. Cron: ночной бэкап

# Ежедневно в 03:00 — дамп и сжатие
0 3 * * * pg_dump -U postgres myapp | gzip > /backup/myapp_$(date +\%Y\%m\%d).sql.gz

Или custom format для последующего pg_restore:

0 3 * * * pg_dump -U postgres -Fc myapp > /backup/myapp_$(date +\%Y\%m\%d).dump

Кратко

ЗадачаКоманда
Дамп в SQLpg_dump dbname > backup.sql
Только схемаpg_dump -s dbname > schema.sql
Дамп для pg_restorepg_dump -Fc dbname > backup.dump
Восстановить SQLpsql -d mydb -f backup.sql
Восстановить dumppg_restore -d mydb backup.dump

Документация: