pg_dumpall#
Примечание
Эта страница переведена при помощи нейросети GigaChat.
Предупреждение
В подразделе «Совместимость утилит» приведено описание совместимости утилит при использовании различных версий клиентской и серверной частей СУБД Pangolin.
pg_dumpall — извлекает кластер баз данных PostgreSQL в файл сценария.
Синтаксис#
pg_dumpall [connection-option...] [option...]
Описание#
pg_dumpall — утилита для резервного копирования всех баз данных кластера PostgreSQL в файл SQL-скрипта. Этот файл содержит команды SQL, которые используются в psql для восстановления баз данных, формируется путем автоматического вызова pg_dump для каждой базы данных в кластере.
pg_dumpall сохраняет глобальные объекты, общие для всех баз данных:
роли пользователей;
табличные пространства;
привилегии для параметров конфигурации (
pg_dumpне включает эти объекты).
Для корректного выполнения резервного копирования необходимо соблюдение следующих условий:
подключение выполняется от имени суперпользователя для полного экспорта;
восстановление выполняет суперпользователь, чтобы иметь возможность создавать базы и управлять ролями.
По умолчанию SQL-скрипт выводится в стандартный поток вывода. Чтобы сохранить его в файл, используйте параметр -f/--file или стандартные операторы оболочки.
pg_dumpall устанавливает соединение с сервером PostgreSQL несколько раз — по одному для каждой базы данных. Если используется парольная аутентификация, система запросит пароль для каждого подключения. Чтобы избежать этого, воспользуйтесь файлом ~/.pgpass.
Совместимость утилит#
Утилиты pg_dump и pg_dumpall имеют обратную совместимость и позволяют снять логическую копию с соответствующей мажорной версии СУБД, так и с предыдущих мажорных версий СУБД, в пределах жизненного цикла как СУБД, так и операционной системы.
В случае, если мажорная версия утилиты меньше мажорной версии СУБД будет получена ошибка следующего вида:
pg_dump: error: server version: 15.5; pg_dump version: 13.8
pg_dump: error: aborting because of server version mismatch
Параметры#
Для утилиты pg_dumpall существуют следующие параметры командной строки:
-a--data-onlyСохраняет только данные, исключая схему (определения данных).
-c--cleanФормирует команды удаления
DROPвсех выгружаемых объектов базы данных, ролей и табличных пространств перед командами их создания. Параметр полезен при восстановлении существующего кластера для перезаписи данных. Если не указан параметр--if-exists, то при удалении несуществующих объектов будет возникать ошибка, которую можно игнорировать.-E encoding--encoding=encodingСоздает выгрузку с указанной кодировкой символов. По умолчанию используется кодировка базы данных.
Другой способ задать кодировку — установить переменную окружения PGCLIENTENCODING для требуемой кодировки выгрузки.
-f filename--file=filenameОтправляет вывод в указанный файл. Если параметр не указан, используется стандартный вывод.
--filter=filenameУказание имени файла, из которого следует читать шаблоны исключенных из дампа баз данных. Шаблоны интерпретируются согласно тем же правилам, что и
--exclude-database. Чтобы прочитать из STDIN, используйте-в качестве имени файла. Опция--filterможет указываться совместно с--exclude-databaseдля исключения баз данных и может также указываться более одного раза для нескольких файлов фильтров.
Файл перечисляет шаблон одной базы данных в строке, используя следующий формат: exclude database PATTERN.
Строки, начинающиеся с #, считаются комментариями и пропускаются. Комментарии можно размещать после строки объекта-шаблона. Пустые строки также игнорируются. Смотрите раздел Шаблоны о том, как выполнять экранирование в шаблонах.
-g--globals-onlyСохраняет только глобальные объекты (роли и табличные пространства), без баз данных.
-O--no-ownerОтменяет формирование команд, устанавливающих владельца базы данных. По умолчанию утилита
pg_dumpallгенерирует командыALTER OWNERилиSET SESSION AUTHORIZATIONдля назначения владельца объектов БД. Эти команды не будут выполняться при запуске сценария, если он запущен не суперпользователем или владельцем объектов.Параметр используется, чтобы создать скрипт, который можно выполнить при восстановлении от лица произвольного пользователя и назначить его в владельцем объектов восстанавливаемой базы.
-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Формирует команды для временного выключения триггеров в целевых таблицах во время восстановления, применяется только для выгрузки данных.
Параметр используется, когда есть проверки ссылочной целостности или другие триггеры, которые нужно выключить на время восстановления данных.
Команды, генерируемые с параметром
--disable-triggers, выполняются суперпользователем (укажите имя суперпользователя в параметре-Sили выполнять скрипт от имени суперпользователя).--exclude-database=patternОтменяет выгрузку баз данных, соответствующих шаблону
pattern. Параметр можно указать несколько раз для исключения баз данных, соответствующих разным шаблонам.Шаблон
patternинтерпретируется так же, как в командах\dвpsql, что позволяет указывать подстановочные символы. При использовании таких символов, убедитесь, чтоpatternзаключен в кавычки, чтобы избежать его обработки оболочкой.--extra-float-digits=ndigitsУказывает точность для чисел с плавающей точкой. При выгрузке данных в целях резервного копирования параметр не используется.
--if-existsДобавляет проверки в команды удаления, не действует без указания
--clean. Утилитаpg_dumpallиспользует командыDROP ... IF EXISTSдля удаления объектов в режиме--clean. При использовании параметра возможные ошибкиdoes not existне выводятся.--insertsВыгружает данные в виде команд
INSERTвместоCOPY.Скорость восстановления заметно снижается. Параметр используется для создания выгрузок, которые будут загружены в базы данных, отличные от PostgreSQL. Восстановление может завершиться неудачно, если у таблицы изменен порядок столбцов (используйте параметр--column-inserts, чтобы избежать этого).--load-via-partition-rootФормирует команды
COPYилиINSERT, ссылающихся на корневую таблицу в иерархии партиционирования.При загрузке данных подходящая партиция выбирается заново для каждой строки. Полезно при восстановлении данных, когда на целевом сервере строки не всегда попадают в те же партиции, в которых они находились на исходном. Это возможно, например, если столбец партиционирования имеет текстовый тип, и две системы имеют разные определения правил сортировки, по которому упорядочивается этот столбец.
--lock-wait-timeout=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Принудительно заключает все идентификаторы в кавычки.
Совет
Используйте при выгрузке базы данных с сервера, основная версия PostgreSQL которого отличается от версии
pg_dumpall, или когда копия предназначена для загрузки на сервер другой основной версии.По умолчанию
pg_dumpallзаключает в кавычки зарезервированные идентификаторы для своей основной версии, что приводит к ошибкам совместимости с серверами других версий (множество зарезервированных идентификаторов может отличаться). Использование--quote-all-identifiersпредотвращает такие проблемы, но ухудшается читаемость скрипта с данными.--rows-per-insert=nrowsУказывает максимальное количеством строк в команде
INSERT(сохраняет данные в виде командINSERT, а неCOPY). Значение должно быть больше 0. В случае ошибок будут утеряны только строки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Указывает хост компьютера, на котором запущен сервер. Значение по умолчанию берется из переменной окружения
PGHOST. Если она не установлена, выполняется подключение к Unix-сокету (каталог 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автоматически запросит пароль, если сервер требует аутентификацию паролем. Однако утилита потратит попытку подключения, чтобы выяснить, что сервер хочет пароль. В некоторых случаях стоит ввести-W, чтобы избежать дополнительной попытки подключения.Внимание
Запрос пароля будет повторяться для каждой базы данных, которую необходимо выгрузить. Настройте файл
~/.pgpass, чтобы избежать ошибок при ручном вводе пароля.--role=rolenameЗадает роль, от имени которой будет выполняться выгрузка. После подключения
pg_dumpallвыполняет командуSET ROLE role_name. Это полезно, если указанный пользователь (-U) не имеет необходимых привилегий, но может переключиться на соответствующую роль. В некоторых средах прямое подключение суперпользователя запрещено, и этот параметр позволяет выполнить выгрузку, соблюдая ограничения.
Переменные окружения#
Утилита поддерживает переменные окружения:
PGDATABASEPGHOSTPGOPTIONSPGPORTPGUSERPG_COLOR
PG_COLOR указывает, использовать ли цвет в диагностических сообщениях. Возможные значения — always, auto и never.
Утилита pg_dump использует переменные окружения, поддерживаемые libpq.
Примечания#
Поскольку pg_dumpall вызывает pg_dump внутри себя, некоторые диагностические сообщения могут ссылаться на pg_dump.
Параметр --clean полезен даже при восстановлении выгрузки в новый кластер. Он позволяет пересоздать встроенные базы данных postgres и template1, сохраняя их исходные свойства (локаль, кодировку). Без этого параметра они сохранят текущие настройки кластера, включая предыдущее содержимое.
После восстановления выполните ANALYZE для каждой базы данных, чтобы оптимизатор мог использовать актуальную статистику. Также можно запустить vacuumdb -a -z, чтобы проанализировать все базы данных.
Не следует ожидать полного выполнения дамп-файла без ошибок. Например, если в исходном кластере существовала роль, то команда CREATE ROLE вызовет ошибку role already exists, если только в целевом кластере не было изменено имя суперпользователя. Эта ошибка может быть проигнорирована.
Использование --clean может привести к появлению дополнительных сообщений об ошибках, связанных с удалением несуществующих объектов. Минимизируйте эти сообщения, добавив параметр --if-exists.
Перед восстановлением убедитесь, что все необходимые каталоги табличных пространств уже существуют. В противном случае попытка создать базы данных вне стандартного расположения завершится с ошибкой.
Примеры#
Выгрузка всех баз данных:
$ pg_dumpall > db.out
Восстановление базу(ы) данных из этого файла:
$ psql -f db.out postgres
Не важно, к какой базе данных подключаться, так как файл скрипта, созданный pg_dumpall, будет содержать соответствующие команды для создания и подключения к сохраненным базам данных. Исключение составляет случай, если указан параметр --clean. В этом случае подключитесь к базе данных postgres изначально, так как сценарий попытается удалить другие базы данных сразу, и это не удастся для базы данных, к которой уже подключены.
Смотрите также#
Проверьте pg_dump для получения информации о возможных условиях ошибки.