JavaRush /Курсы /SQL SELF /Восстановление данных с pg_restore

Восстановление данных с pg_restore

SQL SELF
43 уровень , 3 лекция
Открыта

После того как вы, как ответственный администратор баз данных, создали резервную копию, наступает момент истины: восстановление данных. И тут появляется на сцене главный герой этого эпизода — команда pg_restore. Если pg_dump был вашим супергероем для создания бэкапов, то pg_restore — это его напарник, который воскрешает данные из созданных резервных копий.

pg_restore используется для восстановления данных из файлов, созданных с помощью pg_dump в бинарных форматах (custom или directory). Если по какой-то причине ваша база данных была повреждена, или вы хотите перенести данные на новый сервер, этот инструмент станет вам незаменимым союзником.

Зачем вам нужен pg_restore:

  • Он позволяет восстановить как всю базу данных, так и отдельные её компоненты (схему, таблицы, данные).
  • Это мощный инструмент для сложных сценариев восстановления, где нужно детально управлять процессом.

Основной синтаксис команды

Работа с pg_restore начинается с базового синтаксиса команды:

pg_restore -U username -d database_name backup_file.dump

Параметры команды:

  • -U username: указывает имя пользователя PostgreSQL для подключения.
  • -d database_name: имя базы данных, в которую будут восстанавливаться данные.
  • backup_file.dump: файл резервной копии, созданный ранее с помощью pg_dump в формате custom или directory

Например, если вы хотите восстановить базу данных university из файла backup.dump от имени пользователя postgres, команда будет выглядеть так:

pg_restore -U postgres -d university backup.dump

При запуске этой команды pg_restore начнет процесс восстановления и вернет данные в базу!

Типы бэкапов и их совместимость

Не все резервные копии созданы равными. Возможно, вы помните, что при создании бэкапа с помощью pg_dump мы могли указать разные форматы. Некоторые из них совместимы с pg_restore, а другие нет.

Формат бэкапа Описание Поддерживается pg_restore
plain (текстовый) SQL-скрипт, содержащий команды восстановления. ❌ Нет
custom Сжатый бэкап в проприетарном формате PostgreSQL. ✅ Да
directory Бэкап, сохраненный в виде директории с несколькими файлами. ✅ Да
tar Архив в формате TAR. ✅ Да

Обратите внимание, что для текстовых бэкапов (plain) вы не можете использовать pg_restore. Такие файлы восстанавливаются вручную с помощью команды psql. Например:

psql -U username -d database_name -f backup.sql

Гибкость pg_restore: параметры восстановления

Одна из главных причин, почему pg_restore так популярен, — это его гибкость. С его помощью можно восстановить не только всю базу данных, но и отдельные части.

Восстановление структуры данных. Если вы хотите восстановить только структуру базы данных (схемы таблиц, индексы, триггеры и т.п.), используйте флаг --schema-only:

pg_restore -U postgres -d university --schema-only backup.dump

Это полезно, если вы хотите проанализировать структуру базы или создать "пустую" копию.

Восстановление только данных. Если вас интересуют только данные (без структуры), используйте параметр --data-only:

pg_restore -U postgres -d university --data-only backup.dump

Такой подход может пригодиться, если структура уже существует, но вам нужно восстановить содержимое таблиц.

Очистка перед восстановлением. Иногда таблицы или схемы уже существуют в базе. Чтобы удалить их перед восстановлением, используйте флаг --clean:

pg_restore -U postgres -d university --clean backup.dump

С этим параметром pg_restore сначала удалит существующие объекты, а затем восстановит данные из бэкапа.

Фильтрация объектов. pg_restore позволяет выбрать, какие именно объекты из резервной копии вы хотите восстановить. Для этого используется флаг --table:

pg_restore -U postgres -d university --table=students backup.dump

Этот пример восстановит только таблицу students.

Вывод SQL в консоль

Если вы хотите посмотреть, что именно будет выполнено во время восстановления, но не хотите сразу изменять базу данных, используйте флаг --list:

pg_restore -l backup.dump

А чтобы получить текстовые SQL-команды, которые будут выполнены, добавьте --verbose:

pg_restore -U postgres --verbose --schema-only backup.dump

Примеры восстановления

  1. Полное восстановление базы данных.

Самый типичный сценарий: вы хотите полностью восстановить базу данных из бэкапа:

pg_restore -U postgres -d university backup.dump
  1. Восстановление конкретной таблицы.

Например, если вы потеряли данные только из таблицы courses, восстановите её отдельно:

pg_restore -U postgres -d university --table=courses backup.dump
  1. Восстановление схемы базы данных.

Чтобы восстановить только структуру таблиц (без данных):

pg_restore -U postgres -d university --schema-only backup.dump
  1. Восстановление с пересозданием объектов.

Если вам нужно перезаписать существующие данные:

pg_restore -U postgres -d university --clean backup.dump

Типичные ошибки при восстановлении и их предотвращение

  • Несовместимость версий. Если вы создаете бэкап одной версии PostgreSQL и пытаетесь восстановить его на другую (особенно более старую), вы можете столкнуться с ошибками несовместимости. Решение: старайтесь использовать одинаковые версии PostgreSQL для создания и восстановления бэкапов.

  • Ошибка "Role does not exist". Если в бэкапе используются роли (пользователи), которых нет на сервере восстановления, вы получите эту ошибку. Решение: заранее создайте нужные роли на новом сервере.

  • Ошибка "Table already exists". Эта ошибка возникает, если вы пытаетесь восстановить таблицу, которая уже существует. Используйте --clean, чтобы избежать конфликта.

2
Задача
SQL SELF, 43 уровень, 3 лекция
Недоступна
Восстановление данных только одной таблицы
Восстановление данных только одной таблицы
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Иван Фетисов Уровень 4
15 июля 2025
Не приведены правильные примеры команд