11
сентября
3

pg_dumpall



Наименование

pg_dumpall — извлекает кластер баз данных PostgreSQL в скрипт

Синтаксис

pg_dumpall [connection-option…] [option…]

Описание

pg_dumpall это утилита для записи вывода («сброса») всех баз данных кластера PostgreSQL в один файл сценариев. Этот скрипт содержит SQL-команды, которые могут быть использованы как входные данные psql для восстановления баз данных. Это происходит путем вызова pg_dump для каждой базы данных в кластере. pg_dumpall также делает резервную копию глобальных объектов, которые являются общими для всех баз данных. (pg_dump не сохраняет эти объекты). На данных момент это включает информацию о базе данных пользователей и групп, пространствах таблиц и свойства, такие как права доступа к базам данных в общем.

Поскольку pg_dumpall читает таблицы из всех баз данных, то скорее всего вам придется подключаться в качестве суперпользователя базы данных для получения полного дампа. Также вам будут нужны права суперпользователя для выполнения сохраненного скрипта, чтобы была возможность добавлять пользователей и группы и создавать базы данных.

SQL-скрипт будет писаться в стандартный вывод. Используйте опцию [-f|file] или операторы командного интерпретатора для перенаправления его в файл.pg_dumpall необходимо несколько раз подключаться к серверу PostgreSQL (один раз на базу данных). Если вы используете аутентификацию по паролю, то каждый раз будет запрашиваться пароль. В таких случаях удобно иметь файл ~/.pgpass. См. раздел 31.14 для дополнительной информации.

Опции

Следующие опции командной строки управляют содержанием и форматом вывода.
-a
—data-only
Скидывать в дамп только данные, не схему (определения данных).
-c
—clean
Включать SQL-команды для очистки (drop) баз данных перед их воссозданием. Команды DROP также добавляются для ролей и табличных пространств.
-f filename
—file=filename
Направить вывод в заданный файл. Если этот параметр пропущен, то используется стандартный вывод.
-g
—globals-only
Сбрасывать в дамп только глобальные объекты (роли и пространства таблиц), не базы данных.
-i
—ignore-version
Устаревшая опция, которая в настоящее время игнорируется.
-o
—oids
Для каждой таблицы сбрасывать в дамп идентификаторы объектов (OID) как часть данных. Используйте эту опцию если ваше приложение каким-либо образом ссылается на OID столбцы (например, в ограничении внешнего ключа). В противном случае эта опция не должна быть использована,
-O
—no-owner
Не включать в дамп команды задания принадлежности объектов, соответствующего оригинальной базе данных. По умолчанию pg_dumpall содержит предписание ALTER OWNER или SET SESSION AUTHORIZATION для установки принадлежности элементов созданной схемы. Эти утверждения потерпят неудачу когда выполняется сценарий, если он был запущен суперпользователем (или некоторым пользователем, которому принадлежат все объекты в сценарии). Для создания сценария, который может быть восстановлен любым пользователем, но даст пользователю право владения всеми объектами, установите -O.
-r
—roles-only
Сбрасывать в дамп только роли без баз данных или пространств таблиц.
-s
—schema-only
Включать в дамп только определения объектов (схема), а не данные.
-S username
—superuser=username
Можно указать имя суперпользователя, для использования при отключении триггеров. Это имеет смысл только если используется –disable-triggers. (Обычно это лучше оставить в стороне, а взамен запускать полученный сценарий как суперпользователь.)
-t
—tablespaces-only
Помещать в дамп только пространства таблиц без баз данных или ролей.
-v
—verbose
Установить подробный режим. В этом случае pg_dumpall выводит время пуска/завершения создания в файл дампа и сообщения хода выполнения направляются на стандартный поток ошибок. Это будет также включать подробный вывод в pg_dump.
-V
—version
Вывести версию pg_dumpall и завершить работу.
-x
—no-privileges
—no-acl
Не сохранять права доступа (команды grant/revoke).
—binary-upgrade
Эта опция предназначена для использования вместо утилиты обновления. Ее применение для других целей не рекомендуется и не поддерживается. Поведение для опции может измениться в будущих версиях без предварительного уведомления.
—column-inserts
—attribute-inserts
Сохранять данные как INSERT-команды с точным определением названия столбцов (INSERT INTO table (column, …) VALUES …). Это будет приводить к очень медленному восстановлению; это главным образом полезно для создания дампов, которые могут быть загружены в не-PostgreSQL базы данных.
—disable-dollar-quoting
Эта опция отключает использование знака доллара в качестве разделителя для тела функции и заставляет их для разделения использовать стандартный SQL-синтаксис строки.
—disable-triggers
Эта опция имеет смысл лишь в случае создания резервной копии только данных. Это заставляет pg_dumpall включать команды для временного отключения триггеров на целевых таблицах пока данные не будут загружены. Используете это если есть проверки ссылочной целостности или другие триггеры на таблицы, которые вы не хотите вызывать во время загрузки данных.
В настоящее время выдаваемые команды для —disable-triggers должны быть выполнены от суперпользователя. Таким образом вы также должны задавать имя суперпользователя с -S или выполнять pg_restore, как суперпользователь PostgreSQL, что предпочтительнее.
—inserts
Сохранять данные как INSERT-команды (предпочтительнее, чем COPY). Это будет приводить к очень медленному восстановлению; это главным образом полезно для создания дампов, которые могут быть загружены в не-PostgreSQL базы данных. Заметьте, что восстановление может дать сбой в целом если вы имеете переставленный порядок столбцов. Опция —column-inserts более безопасна, хотя и медленнее.
—lock-wait-timeout=timeout
Не ждать всегда достижения блокировок разделяемой таблицы в начале создания дампа. Вместо этого завершиться неудачей если блокировка таблицы недоступна в течении установленного timeout. Тайм-аут может быть указан в любом из форматов, принятых командой SET statement_timeout. Допустимые значения изменяются в зависимости от версии сервера с которого снимается дамп, но целое число миллисекунд, принимается всеми версиями с 7.3. Эта опция игнорируется, когда версия меньше чем 7.3.
—no-security-labels
Не сбрасывать в дамп метки безопасности.
—no-tablespaces
Не включать в вывод команды создания табличных пространств не выбранных табличных пространств для объектов. С этой опцией все объекты будут созданы в табличном пространстве используемом по умолчанию во время восстановления.
—no-unlogged-table-data
Не сбрасывать в дамп содержимое незарегистрированных таблиц. Эта опция не повлияет на результат в зависимости от наличия или отсутствия определений сохраняемой таблицы (схемы); она только подавляет сброс в дамп данных таблицы.
—quote-all-identifiers
Принужденное включение в кавычки всех идентификаторов. Это может быть полезным, когда сбрасывается в дамп база данных для миграции на будущую версию, в которую могут быть введены дополнительные ключевые слова.
—use-set-session-authorization
Включить в вывод стандартные SQL-команды SET SESSION AUTHORIZATION вместо команд ALTER OWNER для установки права собственности объекта. Это делает дамп более совместимым со стандартами, но в зависимости от истории объектов в дампе может не восстановиться должным образом.
-?
—help
Показать справку по аргументам командной строки pg_dumpall и выйти.

Следующие опции командной строки управляют параметрами подключения к базе данных.
-h host
—host=host
Задает сетевое имя машины на которой работает сервер баз данных. Если значение начинается с косой черты, оно используется в качестве указателя для Unix-сокета. По умолчанию берется из переменной окружения PGHOST, если она установлена, иначе попытается подключиться к Unix-сокету.
-l dbname
—database=dbname
Задает имя базы данных для подключения с целью резервного копирования глобальных объектов и обнаружения какие другие базы данных должны быть сброшены в дамп. Если опция не задана, то будет использоваться база данных postgres, а если она не существует, то template1.
-p port
—port=port
Задает порт TCP или файл локального Unix-сокет на котором сервер прослушивает подключения. По умолчанию используется переменная окружения PGPORT, если установлена, или значение заданное по умолчанию при компиляции.
-U username
—username=username
Имя пользователя от которого происходит подключение.
-w
—no-password
Никогда не выдавать приглашения ввести пароль. Если сервер требует аутентификации с помощью пароля и пароль не доступен другим способом, таким как файл .pgpass, то попытка подключения завершиться неудачей. Эта опция может быть полезна в ряде задач и скриптов, где от пользователя не требуется ввод пароля.
-W
—password
pg_dumpall принудительно выдает приглашение для ввода пароля перед подключением к базе данных.
Эта опция всегда несущественна, так как pg_dumpall автоматически запросит пароль, если сервер требует аутентификации по паролю. Однако pg_dumpall будет совершать излишнюю попытку подключения, определив, что серверу необходим пароль. В некоторых случаях имеет смысл вводить -W, чтобы избежать дополнительной попытки соединения.
Следует взять во внимание, что при резервном копировании запрос пароля будет происходить для каждой базы данных. Обычно лучше задать пароль в файле ~/.pgpass, чем каждый раз вводить пароль вручную.
—role=rolename
Определяет имя роли, которое будет использоваться для создания дампа. Эта опция заставляет pg_dumpall выдавать команду SET ROLE rolename после подключения к базе данных. Это полезно, когда у аутентифицированного пользователя (задается опцией -U) не хватает привилегий необходимых pg_dumpall, но можно сменить на роль с требуемыми правами. Некоторые установки имеют политику против входа в систему непосредственно в качестве суперпользователя и использование этой опции позволяет создавать дампы без нарушения политики.

Окружение
PGHOST
PGOPTIONS
PGPORT
PGUSER
Параметры подключения по умолчанию.
Эта утилита, как и большинство утилит PostgreSQL, также использует переменные окружения поддерживаемые libpq.

Примечания
Поскольку pg_dumpall вызывает внутренне pg_dump, то некоторые диагностические сообщения будут ссылаться на pg_dump.
После восстановления благоразумно выполнить ANALYZE на каждой базе данных для обеспечения оптимизатора полезной статистикой. Вы можете также выполнить vacuumdb -a -z для анализа всех баз данных.
pg_dumpall требует существования перед восстановлением всех нужных директорий табличных пространств; иначе создание базы данных потерпит неудачу для баз данных в нестандартных местах.

Примеры
Создать резервную копию всех баз данных:
$ pg_dumpall > db.out
Для восстановления базы\баз данных из этого файла вы можете использовать:
$ psql -f db.out postgres
(Не важно к какой базе данных вы здесь подключаетесь поскольку скриптовый файл, созданный утилитой pg_dumpall, будет содержать соответствующие команды для создания и подключения к сохраненным базам данных.)

См. также
Проверьте pg_dump для получения подробной информации о возможных появлениях ошибки

Эта статья является переводом соответствующей страницы официальной документации PostgreSQL 9.1 раздела VI «Reference» подраздела II «Клиентские приложения PostgreSQL».

Понравилась статья?
Подписаться на RSS feed
3 комментария:
  1. Kendrick M. Boyer 23 мая, 2013

    У меня куча мелких проектов и Я настроил когда-то себе pg_dumpall. На выходе он, как и pg_dump — выдает sql. Я правильно понял, что я не смогу восстановить базу, если «когда-нибудь удалю файлы из pg_clog»?

  2. Nemo 3 июня, 2013

    pg_clog, которая находится в директории данных postgres, содержит журналы метаданных транзакций, которые необходимы для слежения сервером за состоянием транзакций и в случае их случайного удаления инстанс СУБД окажеться безвозвратно поврежден.
    С SQL-дампа всегда можно восстановить базу на корректно работающий инстанс PostgreSQL.

  3. Антон 3 июня, 2013

    Спасибо за статью, очень полезно

Оставить комментарий