qhb_dumpall - извлекает кластер базы данных QHB в файл сценария

qhb_dumpall - извлекает кластер базы данных QHB в файл сценария

Описание

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

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

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

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

Синтаксис

qhb_dumpall [connection-option...] [OPTION...]

Параметры

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

COMMON OPTIONS

АргументОписание
-?, --helpПоказать справку об аргументах командной строки и выйти.
-V, --versionВывести версию qhb_dumpall и выйти
-v, --verboseВыводит на экран команды, которые qhb_dumpall генерирует и отправляет на сервер.

GENERAL OPTIONS

АргументОписание
-f, --file=FILENAMEПеренаправить вывод в указанный файл для qhb_dumpall. Иначе используется стандартный вывод.
--lock-wait-timeout=TIMEOUTТаймаут, на получение блокировки таблиц. Если невозможно заблокировать таблицу в течение указанного времени - выдаётся ошибка. Подробнее
--no-syncНе дожидаться синхронизации записи файлов на диск Подробнее

CONNECTION OPTIONS

АргументОписание
-d, --dbname=DBNAMEОзнакомиться с отличиями от стандартного поведения
-h, --host=HOSTNAMEИмя хоста, на котором работает сервер. Если значение начинается с косой черты, оно используется в качестве каталога для сокета домена Unix. Значение по умолчанию берется из переменной среды PGHOST, далее предпринимается попытка подключения через сокет домена Unix.
-l, --database=DBNAMEalternative-dbname
-p, --port=PORTTCP порт или расширение файла локального сокета домена Unix. По умолчанию берётся переменная среды PGPORT, или порт заданный при компиляции.
-U, --username=USERNAMEИмя пользователя для подключения.
-w, --no-passwordНе запрашивать ввод пароля. Если серверу требуется аутентификация по паролю, а пароль недоступен другими способами, такими как файл .pgpass, попытка подключения завершится неудачно. Эта опция может быть полезна в пакетных заданиях и сценариях, где нет ни одного пользователя для ввода пароля.
-W, --passwordqhb_dumpall автоматически запросит пароль, если сервер требует аутентификацию по паролю. qhb_dumpall будет пытаться подключиться, для аутентификации. В некоторых случаях стоит ввести -W чтобы избежать дополнительной попытки подключения.
--role=ROLENAMEЗадает имя роли, которая будет использоваться для создания дампа. Подробнее

OPTIONS

АргументОписание
-a, --data-onlyДамп только данных, а не схемы (DDL определения данных).
-c, --cleanВключите команды SQL для очистки (удаления) баз данных перед их воссозданием. В дамп будут добавлены команды DROP для ролей и табличных пространств.
-E encoding, --encoding=encodingСоздать дамп в указанной кодировке. По умолчанию дамп создается в кодировке базы данных. (Другой способ - установить для переменной среды PGCLIENTENCODING желаемую кодировку дампа.)
-g, --globals-onlyДамп только глобальные объекты (роли и табличные пространства), без баз данных.
-O, --no-ownerНе создавать команды для установки владельца объектов Подробнее
-r, --roles-onlyДамп только ролей, без баз данных или табличных пространств.
-s, --schema-onlyДамп только определения объектов (схема), а не данные.
-S NAME, --superuser=NAMEИмя суперпользователя, которое будет использоваться при отключении триггеров. Подробнее
-t, --tablespaces-onlyДамп только табличные пространства, без баз данных или ролей.
-x, --no-privilegesЗапретить сброс прав доступа (команды GRANT / REVOKE).
--binary-upgradeЭта опция предназначена для использования утилитами обновления на месте. Использование в других целях не рекомендуется и не поддерживается. Поведение опции может измениться в будущих выпусках без предварительного уведомления.
--column-insertsФормировать Дамп данных в виде команды INSERT с явными указанием столбцов Подробнее
--disable-dollar-quotingЭтот параметр отключает использование долларовых кавычек для тел функций; можно использовать кавычки из стандартного синтаксиса SQL.
--disable-triggersВключать в дамп команды на отключение триггеров. Подробнее
--extra-float-digits=NUMИспользовать заданное значение extra_float_digits для чисел с плавающей запятой вместо максимально доступной точности. Обычные дампы, созданные для резервного копирования, не должны использовать эту опцию.
--exclude-database=patternНе Включать в Дамп базы данных, соответствующие pattern Подробнее
--if-existsИспользуйте условные команды (добавить IF EXISTS ) при очистке объектов базы данных и других объектов. Не работает без --clean.
--insertsСоздаёт дамп через команды INSERT Подробнее
--load-via-partition-rootДля партиции таблицы ссылаться на корневую таблицу в иерархии партицирования, а не на эту партицию. Подробнее
--no-commentsНе включать в дамп комментарии.
--no-publicationsНе включать в дамп публикации.
--no-security-labelsНе включать в дамп защитные метки.
--no-subscriptionsНе включать в дамп подписки.
--no-role-passwordsНе сбрасывайте пароли для ролей. Подробнее
--no-syncНе дожидаться синхронизации записи файлов на диск Подробнее
--no-tablespacesНе формировать команды для указания табличных пространств. Все объекты будут создаваться в табличном пространстве по умолчанию при восстановлении.
--no-unlogged-table-dataНе выгружать данные нежурналируемых таблицы в дамп. Не влияет на выгрузку определений таблиц.
--on-conflict-do-nothingДобавить ON CONFLICT DO NOTHING к командам INSERT. Работает только с --inserts или --column-inserts.
--quote-all-identifiersВключить принудительно Экранирование идентификаторов при создании дампа Подробнее.
--rows-per-insert=NROWSВыставляет максимально количество строк для INSERT (не COPY). Должно быть больше нуля. Любая ошибка во время загрузки приведет к потере только строк, которые являются частью проблемной INSERT.
--use-set-session-authorizationПодробнее

Дополнительная информация по параметрам

TIMEOUT

--lock-wait-timeout=TIMEOUT

Таймаут, на получение блокировки таблиц в начале дампа. Если невозможно заблокировать таблицу в течение указанного времени - выдаётся ошибка.

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

no sync

--no-sync

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

dbname

-d connstr, --dbname=connstr

Задает параметры, используемые для подключения к серверу, в виде строки подключения.

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

alternative-dbname

-l dbname, --database=dbname

Задает имя базы данных, к которой необходимо подключиться для создания дампов глобальных объектов и определения того, какие другие базы данных должны быть выгружены. Если не указано иное, будет использоваться база данных qhb, если она не существует, будет использоваться template1 .

ROLENAME

--role=ROLENAME

Задает имя роли, которая будет использоваться для создания дампа. qhb_dumpall выполнит команду SET ROLE rolename после подключения к базе данных. Это полезно, когда пользователю (указанному ключом -U) не хватает привилегий, необходимых для снятия дампа, но возможно переключиться на роль с необходимыми правами.

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

no owner

-O, --no-owner Не создавать команды для установки владельца объектов в соответствии с исходной базой данных. По умолчанию qhb_dumpall выдает операторы ALTER OWNER или SET SESSION AUTHORIZATION чтобы установить владельца созданных элементов схемы. Эти операторы не будут выполнены при запуске сценария, если он не запущен суперпользователем (или тем же пользователем, которому принадлежат все объекты в сценарии). Чтобы создать сценарий, который может быть восстановлен любым пользователем, но предоставит ему право владения всеми объектами, укажите -O .

superuser

Имя суперпользователя, которое будет использоваться при отключении триггеров.

Это актуально, только если используется --disable-triggers. (Обычно лучше не указывать это и вместо этого запускать полученный скрипт как суперпользователь.)

column inserts

--column-inserts

Дамп данных в виде команды INSERT с явными указанием столбцов
(INSERT INTO table ( column, ...) VALUES ... ).

Восстановление по такому дампу очень медленное; в основном полезно для создания дампов, которые можно загружать в СУБД, отличные от QHB.

Отключение триггеров

--disable-triggers

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

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

exclude database

--exclude-database=pattern

Не Включать в Дамп базы данных, соответствующие pattern; Несколько баз можно исключить, написав несколько ключей --exclude-database.

Параметр pattern интерпретируется как шаблон по тем же правилам, которые используются командами qsql, поэтому несколько баз данных также можно исключить, написав в шаблоне символы подстановки. При использовании подстановочных знаков, будьте осторожны, если необходимо, указывайте шаблон, чтобы предотвратить расширение оболочки подстановочными знаками.

inserts

--inserts

Создаёт дамп через команды INSERT (а не COPY ). Это сделает восстановление очень медленным; в основном полезно для создания дампов, которые можно загружать в базы данных, отличные от QHB.

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

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

Опция --column-inserts безопасна от изменений порядка столбцов, хотя и медленнее.

load via partition root

--load-via-partition-root

Для партиции таблицы, в дамп формируются команды COPY или INSERT, ссылающиеся на корневую таблицу в иерархии партицирования, а не на эту партицию.

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

Это возможно, когда столбец по которому выполнено партицирование имеет текстовый тип, а правило сортировки определено иначе на стороне системы куда выгружается дамп.

no role passwords

--no-role-passwords

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

Экранирование идентификаторов

--quote-all-identifiers

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

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

use set session authorization

--use-set-session-authorization

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

Окружение

PGHOST

PGOPTIONS

PGPORT

PGUSER

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

PG_COLOR

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

Эта утилита, как и большинство других утилит QHB, также использует переменные среды, поддерживаемые libpq .

Примечания

Поскольку qhb_dumpall вызывает qhb_dump для каждой БД, некоторые диагностические сообщения будут ссылаться на qhb_dump .

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

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

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

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

Примеры

Чтобы сбросить все базы данных:

$ qhb_dumpall > db.out

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

Смотрите Также

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