Иллюстрированный самоучитель по PostgreSQL

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

Архивация файловой системы

Хотя PostgreSQL обеспечивает абстрактное представление пользовательской информации, все данные в базах PostgreSQL хранятся в обычных системных файлах. В процессе работы СУБД эти файлы находятся в постоянном движении, поскольку не все изменения в PostgreSQL немедленно записываются на диск. Файлы хранятся в каталоге PostgreSQL (например, /usr/local/pgsql/data или в любом другом каталоге, определяемом переменной среды PGDATA).

Вместо того чтобы генерировать набор команд SQL для повторного создания базы данных, можно поступить иначе: остановить сервер PostgreSQL (с целью синхронизации всех изменений с файлами на жестком диске) и создать архив соответствующего каталога файловой системы. Обычно это делается утилитой tar; полученный архив можно дополнительно обработать утилитой сжатия (например.

В листинге 9.25 приведен пример архивации каталога данных PostgreSQL Операция выполняется пользователем, которому принадлежат файлы данных (это пользователь, запустивший серверный процесс PostgreSQL). В приведенном примере каталог /usr/local/pgsql/data архивируется пользователем postgres.

Листинг 9.25. Архивация файловой системы PostgreSQL.

[postgres@booktown – ]$ cd /usr/local /pgsql
[postgres@booktown pgsql]$ pg_ctl stop
Smart Shutdown request at Fri Sep 14 14:54:15 2001
DEBUG: shutting down
waiting for postmaster to shut down…… DEBUG: database system is shut down
done
postmaster successfully shut down
[postgres@booktown pgsql]$ tar czf pgsql.bak.tar.gz data/
[postgres@booktown pgsql ]$ Is – 1 *.tar.gz
-rw-rw-r-&thinsp: – 1 postgres postgres 66124795 Sep 14 14:36 pgsql.bak.tar.gz

Обратите внимание: приложение pg_ctl перед вызовом tar останавливает сервер PostgreSQL (с таким же успехом можно вызвать сценарий SysV с командой service, если он установлен в системе). Как упоминалось выше, остановка сервера обеспечивает синхронизацию изменений в базах данных с жестким диском, а также предотвращает возможную модификацию файлов данных в процессе архивации.

Главное преимущество подобного способа архивации заключается в том, что вы получаете фактическую копию файлов данных PostgreSQL. Чтобы восстановить базу данных по такому архиву, необходимо распаковать его в соответствующий каталог и перезапустить сервер. Вам не придется беспокоиться о ключах командной строки, правах принадлежности объектов или потенциальных конфликтах между результатами, полученными программой pg_dump, и существующей базой данных на сервере PostgreSQL.

Тем не менее, несмотря на несомненную простоту реализации, этот способ обладает рядом недостатков. Во-первых, для архивации или восстановления данных приходится останавливать сервер, при этом теряется основное преимущество оперативной архивации – максимальная работоспособность сервера. Во-вторых, вам не удастся архивировать только определенные базы данных или таблицы – для полного восстановления приходится архивировать весь каталог, поскольку с каждой базой данных связано несколько файлов и не всегда понятно, к какой базе данных относится тот или иной файл.

Наконец, рабочая база данных на диске содержит не только абстрактную информацию, но и большой объем служебной информации, поэтому даже сжатая копия каталога данных занимает значительно больше места на диске.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.