3 мая 2012 г.

Восстановление баз данных в PostgreSQL

Ну вот и пришло время восстанваливать вконец изуродованную базу данных после различных экспериментов над ней. В прошлом посте я рассказывал как сделать дамп базы. Причем дампы у нас создавались и архивировались автоматически ежедневно.
С того времени у меня накопилось достаточно дампов. Довольный самим собой я взял последний дамп еще не изуродованной базы, распаковал ее, запустил pgAdmin III и внезапно выяснил, что он не хочет принимать мой дамп. Никак не хочет, подлец!
В результате некторого исследования я выяснил, что:
  1. я снимал дампы в формате Plain, что значит - я снимал базу в виде скриптов для ее создания, причем вместе с данными.
  2. pgAdmin III (а равно как и pg_restore) не работает с plain форматом
Ну чтож "Бяда, бяда, огорчение" да делать нечего. Порыскал в инете как там восстанавливаются базы из plain файлов и выяснил что этим занимается psql.
Команда для восстановления будет выглядеть так:
psql -U postgres -d <имя_базы_данных> -f <путь_к_файлу_с_SQL_командами>
Но если запустить сейчас такую команду, то получим множество ошибок, потому что наша база еще существует и в ней лежат какие-то данные (для СУБД они корректны). Так что сначала нашу базу данных надо удалить (возможно есть вариант просто очистки, я пока его не нашел)

Итак удаляем базу данных и заново ее создаем

psql -U postgres -c "drop database <имя_базы_данных>"
psql -U postgres -c "create database <имя_базы_данных>"

Ну вот теперь можно восстанавливать нашу базу данных из дампа.

gzip -dc <Путь_к_нашему_архиву_.gz_с_дампом> | psql -U postgres -d <имя_базы_данных> -f -

Ну вот мы и имеем чистенькую, неполоманную базу данных. Можно продолжать эксперименты.

Комментариев нет :