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, щоб уникнути конфлікту.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ