Архивация и восстановление данных
Обратите внимание: в PostgreSQL 7.1.x возможности сценария pg_dumpall несколько ограничены по сравнению с обычным сценарием pg_dump. Например, ключ – и не позволяет передать другое имя пользователя и пароль, а ключ – F не может задать другой формат, кроме простого текста (архивы создаются в текстовом виде независимо от выбранного формата). Отсюда следует, что ключ – b тоже не может передаваться программе pg_dumpall, поскольку для него необходимы другие форматы, кроме текстового.
Хотя приложению pg_dump можно передать имя файла при помощи ключа – f, полученный архив будет неполным, поскольку глобальные данные pg_dumpall все-равно направляются в поток stdout. Проблемы с ключом решаются перенаправлением вывода pg_dumpall в файл средствами командного интерпретатора (>).
Отсутствие ключа – f компенсируется простым присваиванием переменной среды PGUSER. А если вы подключаетесь к системе, требующей аутентификации с использованием пароля, и не хотите отдельно передавать пароль для каждой архивируемой базы данных, присвойте значение переменной PGPASSWORD.
В листинге 9.22 приведена простая команда bash для определения временной переменной среды PGUSER при вызове клиента PostgreSQL Хотя необходимость в таких переменных возникает редко, это полезный прием, о котором следует помнить в некоторых специфических случаях – например, при работе со сценарием pg_dumpall. В листинге 9.22 переменная PGUSER обеспечивает создание одного архивного файла для всех баз данных.
Листинг 9.22. Использование команды pg_dumpall.
[jworsley@booktown – ]$ PGUSER=postgres pg_dumpall > all.sql
Первая часть команды, приведенной в листинге 9.22, присваивает временной переменной PGUSER значение postgres. Переменная создается на время работы pg_dumpall и прекращает свое существование при завершении программы.
Примечание
В общем случае приложение pg_dumpall должно выполняться суперпользователем PostgreSQL. Это связано с тем, что команда pg_dumpall обращается к системным каталогам PostgreSQL, поскольку наряду с объектами баз данных она архивирует глобальные объекты.
Команду pg_dumpall также можно выполнять в удаленном режиме, хотя для этого следует задать значения всех необходимых переменных среды. Процедура сильна зависит от настройки удаленного хоста в файле pg_hba.conf.
Команда pg_dumpall используется в ситуациях, когда базы данных особенно не удобно архивировать по отдельности или при наличии сложной системы пользователей и групп. Если вам мешают ограничения pg_dumpall в области вывода дан ных (особенно если ваша база данных использует большие объекты), проще всего выполнить команду pg_dumpall с ключом – g, чтобы заархивировать все данные пользователей и групп, и затем поочередно вызвать программу pg_dump для все) баз данных, которые необходимо заархивировать.