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
) не имеет необходимых привилегий, но может переключиться на соответствующую роль. В некоторых средах прямое подключение суперпользователя запрещено, и этот параметр позволяет выполнить выгрузку, соблюдая ограничения.
Переменные окружения
Утилита поддерживает переменные окружения:
PGDATABASE
PGHOST
PGOPTIONS
PGPORT
PGUSER
PG_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 для получения информации о возможных условиях ошибки.