Към съдържанието

Възстановяване на PostgreSQL

Бекъпът на PostgreSQL, създаден чрез типа "Резултат от команда", съдържа SQL дъмп (например shop.sql). Най-бързият начин да го възстановите е типът "Програмен вход": системата подава файла от бекъпа директно на psql, без да го записва на диска.

Подготовка на целевата база

Препоръчваме да възстановявате в нова, празна база и да проверите данните, преди да я използвате на мястото на старата. Създайте потребител с права за запис и база, на която той е собственик:

CREATE ROLE restore LOGIN PASSWORD 'парола';
CREATE DATABASE shop_restored OWNER restore;

Добавете паролата в /root/.pgpass, за да може psql да се свърже без интерактивно въвеждане:

echo "localhost:5432:*:restore:парола" | sudo tee -a /root/.pgpass
sudo chmod 600 /root/.pgpass

Внимание

Ако възстановите дъмпа в база, в която вече има същите таблици, psql ще спре с грешка при първия конфликт. Не възстановявайте директно върху продукционната база. Използвайте нова база и след проверка я преименувайте или пренасочете приложението към нея.

Стъпки за възстановяване

Отворете раздел "Устройства", натиснете "Управление" до устройството и изберете "Възстановяване на архивирани данни".

Стъпки 1 и 2: Хранилище и моментно копие

Избор на моментно копие

Изберете мястото за съхранение, защитения елемент (например PostgreSQL - shop) и моментното копие, от което искате да възстановите. Най-новото копие е най-отгоре.

Стъпка 3: Тип на възстановяване

Тип на възстановяване „Програмен вход“

Изберете "Програмен вход".

Стъпка 4: Избор на обекти

Избор на SQL файла

Маркирайте файла с дъмпа (например shop.sql).

Стъпка 5: Опции за възстановяване

Команда за psql

В полето "Команда" въведете:

/usr/bin/psql -h localhost -U restore -d shop_restored -q -v ON_ERROR_STOP=1 --single-transaction --no-password

Оставете "Начин на обработка на файловете" на "Подаване на файлове към stdin" и натиснете "Възстановяване".

Какво правят параметрите на psql:

  • -d shop_restored — базата, в която се зареждат данните.
  • -q — по-кратък изход, без съобщение за всяка изпълнена команда.
  • -v ON_ERROR_STOP=1 — psql спира при първата грешка и процесът завършва със статус "Неуспешно", вместо да продължи с непълни данни.
  • --single-transaction — целият дъмп се зарежда в една транзакция. При грешка базата остава непроменена.
  • --no-password — паролата се взима само от .pgpass.

Проверка

Процесът по възстановяване се появява в раздел Процеси с тип "Възстановяване". Статус "Успешно" означава, че psql е изпълнил целия дъмп без грешки. Ако статусът е "Предупреждение" или "Неуспешно", отворете детайлите на процеса. Там са съобщенията от psql.

След това проверете данните в новата база, например:

sudo -H psql -h localhost -U restore -d shop_restored -c "SELECT count(*) FROM orders;"

Други начини за възстановяване

  • Файлове и папки — записва shop.sql в посочена директория на устройството. След това можете да го заредите ръчно с psql -f /път/до/shop.sql, например ако искате първо да прегледате или редактирате дъмпа.
  • Компресиран архив — записва дъмпа като zip или tar архив, например за пренасяне на друга машина.

Добри практики

  • Тествайте възстановяването периодично, а не само когато е спешно.
  • Възстановявайте в отделна база или на тестов сървър, преди да замените продукционни данни.
  • Използвайте psql със същата или по-нова версия от тази на pg_dump, с който е направен бекъпът.