pg_dumpall#

pg_dumpall

pg_dumpall

pg_dumpall — Извлекает кластер базы данных Tantor SE в файл скрипта

Синтаксис

pg_dumpall [connection-option...] [option...]

Описание

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

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

Весь SQL-скрипт будет записан в стандартный вывод. Используйте опцию -f/--file или операторы оболочки для перенаправления его в файл.

pg_dumpall должен подключаться несколько раз к серверу Tantor SE (по одному разу для каждой базы данных). Если вы используете аутентификацию по паролю, он будет запрашивать пароль каждый раз. В таких случаях удобно иметь файл ~/.pgpass. См. Раздел 32.16 для получения дополнительной информации.

Опции

Следующие параметры командной строки управляют содержимым и форматом вывода.

-a
--data-only

Выполните дамп только данных, без схемы (определений данных).

-c
--clean

Выполнить SQL-команды DROP для всех выгруженных баз данных, ролей и таблисейсов перед их воссозданием. Этот параметр полезен, когда восстановление должно перезаписать существующий кластер. Если какие-либо объекты не существуют в целевом кластере, будут выведены игнорируемые сообщения об ошибках во время восстановления, если не указана также опция --if-exists.

-E encoding
--encoding=encoding

Создайте дамп в указанной кодировке набора символов. По умолчанию дамп создается в кодировке базы данных. (Другой способ получить тот же результат - установить переменную окружения PGCLIENTENCODING в желаемую кодировку дампа).

-f filename
--file=filename

Отправьте вывод в указанный файл. Если это не указано, используется стандартный вывод.

-g
--globals-only

Сохранить только глобальные объекты (роли и табличные пространства), без баз данных.

-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 ...). Это сделает процесс восстановления очень медленным; полезно в основном для создания выгрузок, которые можно загрузить в базы данных, не являющиеся Tantor SE.

--disable-dollar-quoting

Этот параметр отключает использование долларовой кавычки для тел функций и заставляет их заключать в кавычки с использованием стандартного синтаксиса строк SQL.

--disable-triggers

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

В настоящее время команды, генерируемые для --disable-triggers, должны выполняться от имени суперпользователя. Поэтому вы также должны указать имя суперпользователя с помощью -S или, желательно, быть осторожными и запустить полученный скрипт от имени суперпользователя.

--exclude-database=pattern

Не выполняйте выгрузку баз данных, имена которых соответствуют pattern. Несколько шаблонов можно исключить, написав несколько переключателей --exclude-database. Параметр pattern интерпретируется как шаблон в соответствии с теми же правилами, что и команды \d в psql (см. раздел Patterns ниже), поэтому несколько баз данных также можно исключить, написав символы подстановки в шаблоне. При использовании символов подстановки будьте осторожны, чтобы при необходимости заключить шаблон в кавычки и предотвратить раскрытие символов подстановки командным интерпретатором (оболочкой).

--extra-float-digits=ndigits

Используйте указанное значение extra_float_digits при выгрузке чисел с плавающей точкой вместо максимально доступной точности. Регулярные выгрузки, созданные для резервного копирования, не должны использовать эту опцию.

--if-exists

Используйте команды DROP ... IF EXISTS для удаления объектов в режиме --clean. Это подавляет ошибки не существует, которые в противном случае могли бы быть сообщены. Этот параметр недействителен, если не указан также --clean.

--inserts

Выполняйте выгрузку данных в виде команд INSERT (а не COPY). Это сделает процесс восстановления очень медленным; это полезно в основном для создания выгрузок, которые можно загрузить в базы данных, не являющиеся Tantor SE. Обратите внимание, что восстановление может полностью завершиться неудачей, если вы изменили порядок столбцов. Опция --column-inserts более безопасна, но работает еще медленнее.

--load-via-partition-root

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

--lock-wait-timeout=timeout

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

--no-comments

Не сохранять комментарии.

--no-publications

Не выгружайте публикации.

--no-role-passwords

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

--no-security-labels

Не сохранять метки безопасности.

--no-subscriptions

Не выгружать подписки.

--no-sync

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

--no-table-access-method

Не выводите команды для выбора методов доступа к таблицам. С этой опцией все объекты будут созданы с тем методом доступа к таблицам, который является значением по умолчанию во время восстановления.

--no-tablespaces

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

--no-toast-compression

Не выводите команды для установки методов сжатия TOAST. С этой опцией все столбцы будут восстановлены с настройками сжатия по умолчанию.

--no-unlogged-table-data

Не выполнять выгрузку содержимого незафиксированных таблиц. Этот параметр не влияет на выгрузку определений таблиц (схемы); он только подавляет выгрузку данных таблицы.

--on-conflict-do-nothing

Добавьте ON CONFLICT DO NOTHING к командам INSERT. Этот параметр не действителен, если не указаны также параметры --inserts или --column-inserts.

--quote-all-identifiers

Принудительное заключение в кавычки всех идентификаторов. Эта опция рекомендуется при выгрузке базы данных с сервера, чей основной номер версии Tantor SE отличается от основного номера версии pg_dumpall, или когда вывод предназначен для загрузки в сервер другой основной версии. По умолчанию pg_dumpall заключает в кавычки только идентификаторы, являющиеся зарезервированными словами в его собственной основной версии. Это иногда приводит к проблемам совместимости при работе с серверами других версий, которые могут иметь немного разные наборы зарезервированных слов. Использование --quote-all-identifiers предотвращает такие проблемы, но усложняет чтение скрипта выгрузки.

--rows-per-insert=nrows

Дамп данных в виде команд INSERT (а не COPY). Определяет максимальное количество строк в каждой команде INSERT. Значение должно быть числом, большим нуля. Любая ошибка при восстановлении приведет к потере только тех строк, которые являются частью проблемной команды INSERT, а не всего содержимого таблицы.

--use-set-session-authorization

Выводите команды SET SESSION AUTHORIZATION вместо команд ALTER OWNER для определения владения объектом. Это делает дамп более совместимым со стандартами, но в зависимости от истории объектов в дампе может не восстанавливаться должным образом.

-?
--help

Показать справку о командной строке для pg_dumpall, и выйти.

Следующие параметры командной строки управляют параметрами подключения к базе данных.

-d connstr
--dbname=connstr

Указывает параметры, используемые для подключения к серверу, в виде строки подключения; эти параметры переопределяют любые конфликтующие параметры командной строки.

Опция называется --dbname для согласованности с другими клиентскими приложениями, но поскольку pg_dumpall должен подключаться к множеству баз данных, имя базы данных в строке подключения будет проигнорировано. Используйте опцию -l, чтобы указать имя базы данных, используемой для начального подключения, которая будет выполнять дамп глобальных объектов и определит, какие другие базы данных должны быть выгружены.

-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

Параметры подключения по умолчанию

PG_COLOR

Определяет, следует ли использовать цвет в диагностических сообщениях. Возможные значения: always, auto и never.

Эта утилита, как и большинство других утилит Tantor SE, также использует переменные среды, поддерживаемые libpq (см. Раздел 32.15).

Примечания

С учетом того, что pg_dumpall вызывает внутренне pg_dump, некоторые диагностические сообщения будут относиться к pg_dump.

Опция --clean может быть полезна даже тогда, когда ваша цель - восстановить скрипт дампа в новый кластер. Использование опции --clean авторизует скрипт на удаление и повторное создание встроенных баз данных postgres и template1, гарантируя, что эти базы данных сохранят те же свойства (например, локаль и кодировку), которые они имели в исходном кластере. Без этой опции эти базы данных сохранят свои существующие свойства на уровне базы данных, а также любое предварительно существующее содержимое.

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

Скрипт дампа не должен ожидать полного выполнения без ошибок. В частности, поскольку скрипт будет выполнять CREATE ROLE для каждой роли, существующей в исходном кластере, он обязательно получит ошибку роль уже существует для инициализирующего суперпользователя, если целевой кластер был инициализирован с другим именем инициализирующего суперпользователя. Эта ошибка безвредна и должна быть проигнорирована. Использование опции --clean может привести к появлению дополнительных безвредных сообщений об отсутствующих объектах, хотя их количество можно сократить, добавив опцию --if-exists.

pg_dumpall требует, чтобы все необходимые каталоги табличного пространства существовали перед восстановлением; в противном случае, создание базы данных завершится неудачей для баз данных, находящихся в нестандартных местоположениях.

Примеры

Для создания резервной копии всех баз данных:

$ pg_dumpall > db.out

Для восстановления базы данных(ей) из этого файла вы можете использовать:

$ psql -f db.out postgres

Не важно, к какой базе данных вы подключаетесь здесь, поскольку файл сценария, созданный pg_dumpall, будет содержать соответствующие команды для создания и подключения к сохраненным базам данных. Исключение составляет то, что если вы указали --clean, вы должны сначала подключиться к базе данных postgres; сценарий попытается немедленно удалить другие базы данных, и это не удастся для базы данных, к которой вы подключены.

См. также

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