pg_dump#

pg_dump

pg_dump

pg_dump — извлекает базу данных Tantor SE в файл сценария или другой архивный файл

Синтаксис

pg_dump [connection-option...] [option...] [dbname]

Описание

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

pg_dump только выполняет резервное копирование одной базы данных. Чтобы создать резервную копию всего кластера или резервную копию глобальных объектов, которые общие для всех баз данных в кластере (например, ролей и таблиц), используйте pg_dumpall.

Дампы могут быть выведены в форматах скрипта или архивных файлов. Скриптовые дампы - это файлы в формате обычного текста, содержащие SQL-команды, необходимые для восстановления базы данных в состояние, в котором она находилась в момент сохранения. Чтобы восстановить базу данных из такого скрипта, передайте его в psql. Скриптовые файлы могут быть использованы для восстановления базы данных даже на других компьютерах и других архитектурах; с некоторыми модификациями - даже на других SQL-продуктах баз данных.

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

Когда используется с одним из форматов архивных файлов и в сочетании с pg_restore, pg_dump предоставляет гибкий механизм архивирования и передачи данных. pg_dump может использоваться для создания резервной копии всей базы данных, а затем pg_restore может использоваться для просмотра архива и/или выбора частей базы данных, которые должны быть восстановлены. Самые гибкие форматы файлов вывода - это формат custom (-Fc) и формат directory (-Fd). Они позволяют выбирать и изменять порядок всех архивированных элементов, поддерживают параллельное восстановление и по умолчанию сжаты. Формат directory - единственный формат, который поддерживает параллельные дампы.

Во время выполнения приложения pg_dump следует внимательно изучить вывод на предмет предупреждений (выводимых в стандартный поток ошибок), особенно с учетом ограничений, перечисленных ниже.

Опции

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

dbname

Указывает имя базы данных, которая будет выгружена. Если это не указано, используется переменная среды PGDATABASE. Если она не установлена, используется имя пользователя, указанное для подключения.

-a
--data-only

Выполните дамп только данных, а не схемы (определений данных). Данные таблицы, большие объекты и значения последовательностей будут сохранены.

Эта опция похожа, но по историческим причинам не идентична указанию --section=data.

-b
--large-objects
--blobs (deprecated)

Включить большие объекты в дамп. Это поведение по умолчанию, за исключением случаев, когда указаны --schema, --table или --schema-only. Переключатель -b полезен только для добавления больших объектов в дампы, когда запрашивается конкретная схема или таблица. Обратите внимание, что большие объекты считаются данными и поэтому будут включены, когда используется --data-only, но не когда используется --schema-only.

-B
--no-large-objects
--no-blobs (deprecated)

Исключить большие объекты из дампа.

Когда указаны оба -b и -B, поведение заключается в выводе больших объектов при выполнении операции выгрузки данных, см. документацию по -b.

-c
--clean

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

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

-C
--create

Начните вывод с команды для создания самой базы данных и повторного подключения к созданной базе данных. (С помощью такого скрипта не имеет значения, к какой базе данных в установке назначения вы подключаетесь перед запуском скрипта). Если также указана опция --clean, скрипт удаляет и воссоздает целевую базу данных перед повторным подключением к ней.

С помощью опции --create выводится также комментарий к базе данных, если он есть, а также все настройки конфигурационных переменных, специфичных для этой базы данных, то есть все команды ALTER DATABASE ... SET ... и ALTER ROLE ... IN DATABASE ... SET ..., которые упоминают эту базу данных. Также выводятся привилегии доступа к самой базе данных, если не указана опция --no-acl.

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

-e pattern
--extension=pattern

Создавайте резервные копии только расширений, соответствующих pattern. Если этот параметр не указан, будут созданы резервные копии всех несистемных расширений в целевой базе данных. Можно выбрать несколько расширений, написав несколько переключателей -e. Параметр pattern интерпретируется как шаблон в соответствии с теми же правилами, которые используются командами \d в psql (см. Patterns), поэтому несколько расширений также можно выбрать, написав символы подстановки в шаблоне. При использовании символов подстановки будьте осторожны и, при необходимости, заключайте шаблон в кавычки, чтобы предотвратить раскрытие символов подстановки оболочкой.

Все отношения конфигурации, зарегистрированные с помощью функции pg_extension_config_dump, включаются в дамп, если их расширение указано с помощью параметра --extension.

Примечание

Когда указывается параметр -e, pg_dump не пытается сохранить другие объекты базы данных, от которых могут зависеть выбранные расширения. Поэтому нет гарантии, что результаты дампа конкретного расширения можно успешно восстановить в чистую базу данных.

-E encoding
--encoding=encoding

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

-f file
--file=file

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

-F format
--format=format

Выбирает формат вывода. format можно записать одним из следующих способов:

p
plain

Вывести файл сценария SQL в виде обычного текста (по умолчанию).

c
custom

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

d
directory

Вывод каталога в формате архива, подходящем для ввода в pg_restore. Это создаст каталог с одним файлом для каждой таблицы и большого объекта, которые выгружаются, плюс так называемый файл оглавления, описывающий выгруженные объекты в машиночитаемом формате, который pg_restore может прочитать. Архив в формате каталога можно обрабатывать с помощью стандартных инструментов Unix; например, файлы в не сжатом архиве можно сжать с помощью инструментов gzip, lz4 или zstd. Этот формат по умолчанию сжимается с использованием gzip и также поддерживает параллельные дампы.

t
tar

Выведите архив в формате tar, подходящий для ввода в pg_restore. Формат tar совместим с форматом каталога: извлечение архива в формате tar создает допустимый архив в формате каталога. Однако формат tar не поддерживает сжатие. Кроме того, при использовании формата tar относительный порядок элементов данных таблицы не может быть изменен во время восстановления.

-j njobs
--jobs=njobs

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

pg_dump откроет njobs + 1 соединений с базой данных, поэтому убедитесь, что значение параметра max_connections достаточно высоко для обеспечения всех соединений.

Запрос исключающих блокировок на объекты базы данных во время параллельной выгрузки может привести к сбою выгрузки. Причина заключается в том, что главный процесс pg_dump запрашивает общие блокировки (ACCESS SHARE) на объекты, которые рабочие процессы собираются выгружать позже, чтобы убедиться, что никто не удаляет их и не устраняет их во время выполнения выгрузки. Если другой клиент затем запрашивает исключающую блокировку на таблицу, эта блокировка не будет предоставлена, но будет поставлена в очередь, ожидая освобождения общей блокировки главного процесса. Следовательно, любой другой доступ к таблице также не будет предоставлен и будет поставлен в очередь после запроса исключающей блокировки. Сюда входит и рабочий процесс, пытающийся выгрузить таблицу. Без предосторожностей это будет классическая ситуация взаимной блокировки. Чтобы обнаружить этот конфликт, рабочий процесс pg_dump запрашивает другую общую блокировку с использованием опции NOWAIT. Если рабочему процессу не предоставляется эта общая блокировка, кто-то другой, вероятно, запросил исключающую блокировку в промежутке времени, и нет возможности продолжить выгрузку, поэтому pg_dump не имеет выбора, кроме как прервать выгрузку.

Для выполнения параллельной выгрузки сервер базы данных должен поддерживать синхронизированные снимки, функцию, которая была введена в Tantor SE9.2 для основных серверов и 10 для резервных. С помощью этой функции клиенты базы данных могут гарантировать, что они видят одинаковый набор данных, даже если используют разные соединения. Команда pg_dump -j использует несколько соединений с базой данных; она подключается к базе данных один раз с помощью процесса-лидера и еще раз для каждой задачи рабочего процесса. Без функции синхронизированного снимка разные рабочие задачи не гарантировали бы одинаковость данных в каждом соединении, что могло бы привести к несогласованному резервному копированию.

-n pattern
--schema=pattern

Дамп только схемы, соответствующие шаблону; это выбирает как саму схему, так и все содержащиеся в ней объекты. Если этот параметр не указан, будут дампированы все несистемные схемы в целевой базе данных. Несколько схем могут быть выбраны путем написания нескольких переключателей -n. Параметр шаблон интерпретируется как шаблон в соответствии с теми же правилами, которые используются командами psql \d (см. Patterns), поэтому несколько схем также могут быть выбраны путем написания подстановочных символов в шаблоне. При использовании подстановочных символов будьте осторожны, чтобы при необходимости заключить шаблон в кавычки, чтобы предотвратить расширение подстановочных символов оболочкой; см. Examples ниже.

Примечание

Когда указана опция -n, pg_dump не пытается сохранить никакие другие объекты базы данных, от которых могут зависеть выбранные схемы. Поэтому нет гарантии, что результаты дампа конкретной схемы можно успешно восстановить в чистую базу данных.

Примечание

Несхемные объекты, такие как большие объекты, не выгружаются, когда указана опция -n. Вы можете добавить большие объекты обратно в дамп с помощью переключателя --large-objects.

-N pattern
--exclude-schema=pattern

Не выполнять выгрузку схем, соответствующих pattern. Шаблон интерпретируется согласно тем же правилам, что и для -n. -N может быть указано несколько раз для исключения схем, соответствующих любому из нескольких шаблонов.

Когда указаны оба параметра -n и -N, поведение состоит в том, чтобы выгрузить только схемы, которые соответствуют хотя бы одному параметру -n, но не соответствуют параметру -N. Если параметр -N указан без параметра -n, то схемы, соответствующие параметру -N, исключаются из обычной выгрузки.

-O
--no-owner

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

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

-R
--no-reconnect

Эта опция устарела, но все еще принимается для обратной совместимости.

-s
--schema-only

Сохранить только определения объектов (схему), а не данные.

Этот параметр является обратным для параметра --data-only. Он похож на, но по историческим причинам не идентичен, указанию --section=pre-data --section=post-data.

(Не путайте это с опцией --schema, которая использует слово схема в другом значении).

Чтобы исключить данные таблиц только для определенного подмножества таблиц в базе данных, см. --exclude-table-data.

-S username
--superuser=username

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

-t pattern
--table=pattern

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

С помощью этой опции можно сохранить определение соответствующих представлений, материализованных представлений, внешних таблиц и последовательностей, а также таблиц. Она не сохраняет содержимое представлений или материализованных представлений, а содержимое внешних таблиц будет сохранено только в том случае, если соответствующий внешний сервер указан с помощью опции --include-foreign-data.

При использовании параметра -t переключатели -n и -N не имеют эффекта, поскольку таблицы, выбранные с помощью параметра -t, будут выгружены независимо от этих переключателей, а не таблицные объекты не будут выгружены.

Примечание

Когда указана опция -t, pg_dump не пытается сохранить какие-либо другие объекты базы данных, от которых могут зависеть выбранные таблицы. Поэтому нет гарантии, что результаты дампа конкретной таблицы могут быть успешно восстановлены в чистую базу данных.

-T pattern
--exclude-table=pattern

Не выполнять выгрузку таблиц, соответствующих pattern. Шаблон интерпретируется согласно тем же правилам, что и для -t. -T может быть указано несколько раз для исключения таблиц, соответствующих любому из нескольких шаблонов.

Когда указаны оба -t и -T, поведение заключается в том, чтобы выгрузить только таблицы, которые соответствуют хотя бы одному переключателю -t, но не соответствуют переключателям -T. Если -T появляется без -t, то таблицы, соответствующие -T, исключаются из обычной выгрузки.

-v
--verbose

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

-V
--version

Вывести версию pg_dump и завершить работу.

-x
--no-privileges
--no-acl

Предотвратить выгрузку прав доступа (команды grant/revoke).

-Z level
-Z method[:detail]
--compress=level
--compress=method[:detail]

Укажите метод сжатия и/или уровень сжатия для использования. Метод сжатия может быть установлен на gzip, lz4, zstd или none для отсутствия сжатия. Строка деталей сжатия может быть указана опционально. Если строка деталей является целым числом, она указывает уровень сжатия. В противном случае, это должен быть список элементов, разделенных запятыми, каждый из которых имеет форму keyword или keyword=value. В настоящее время поддерживаемые ключевые слова: level и long.

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

Для форматов архива custom и directory это указывает на сжатие отдельных сегментов данных таблицы, и по умолчанию используется gzip на умеренном уровне. Для вывода в виде обычного текста, установка ненулевого уровня сжатия приводит к сжатию всего выходного файла, как если бы он был пропущен через gzip, lz4 или zstd; но по умолчанию сжатие не выполняется. При сжатии с помощью zstd, режим long может улучшить коэффициент сжатия, за счет увеличения использования памяти.

Формат архива tar в настоящее время не поддерживает сжатие вообще.

--binary-upgrade

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

--column-inserts
--attribute-inserts

Рекомендуется выгружать данные в виде команд INSERT с явным указанием имен столбцов (INSERT INTO table (column, ...) VALUES ...). Это сильно замедлит восстановление и главным образом применимо при создании выгрузок, которые можно загрузить в базы данных, отличные от Tantor SE. Любая ошибка при восстановлении приведет к потере только тех строк, которые являются частью проблемной команды INSERT, а не всего содержимого таблицы.

--disable-dollar-quoting

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

--disable-triggers

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

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

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

--enable-large-allocations

Увеличение допустимого размера загрузки ячейки таблицы до 1 ГБ для типов данных bytea и text. Этот аргумент активирует параметр конфигурации enable_large_allocations.

--enable-row-security

Этот параметр актуален только при выгрузке содержимого таблицы, у которой есть защита строк. По умолчанию, pg_dump устанавливает значение row_security в off, чтобы гарантировать выгрузку всех данных из таблицы. Если у пользователя недостаточно привилегий для обхода защиты строк, то будет сгенерирована ошибка. Этот параметр указывает pg_dump установить значение row_security в on, позволяя пользователю выгружать только те части содержимого таблицы, к которым у него есть доступ.

Обратите внимание, что если вы используете эту опцию в настоящее время, вам, вероятно, также понадобится дамп в формате INSERT, так как COPY FROM во время восстановления не поддерживает защиту строк.

--exclude-table-and-children=pattern

Это то же самое, что и опция -T/--exclude-table, за исключением того, что она также исключает любые секции или унаследованные дочерние таблицы таблицы (таблиц), соответствующих шаблону.

--exclude-table-data=pattern

Не выполнять выгрузку данных для таблиц, соответствующих заданному pattern. Шаблон интерпретируется согласно тем же правилам, что и для -t. --exclude-table-data может быть указано несколько раз для исключения таблиц, соответствующих нескольким шаблонам. Эта опция полезна, когда вам нужно определение определенной таблицы, но вам не нужны данные в ней.

Чтобы исключить данные для всех таблиц в базе данных, см. --только-схема.

--exclude-table-data-and-children=pattern

Это то же самое, что и --exclude-table-data опция, за исключением того, что она также исключает данные любых секций или наследуемых дочерних таблиц таблицы(таблиц), соответствующих шаблону.

--extra-float-digits=ndigits

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

--if-exists

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

--include-foreign-data=foreignserver

Выгрузите данные для любой внешней таблицы с внешним сервером, соответствующим шаблону foreignserver. Несколько внешних серверов могут быть выбраны путем написания нескольких переключателей --include-foreign-data. Также параметр foreignserver интерпретируется как шаблон в соответствии с теми же правилами, которые используются командами psql \d (см. Patterns), поэтому несколько внешних серверов также могут быть выбраны путем написания подстановочных символов в шаблоне. При использовании подстановочных символов будьте осторожны, чтобы при необходимости заключить шаблон в кавычки, чтобы предотвратить расширение подстановочных символов оболочкой; см. Examples ниже. Единственным исключением является то, что пустой шаблон не допускается.

Примечание

Использование подстановочных знаков в --include-foreign-data может привести к доступу к неожиданным внешним серверам. Также, чтобы безопасно использовать эту опцию, убедитесь, что указанный сервер имеет доверенного владельца.

Примечание

Когда указана опция --include-foreign-data, pg_dump не проверяет, что внешняя таблица доступна для записи. Поэтому нет гарантии, что результаты дампа внешней таблицы можно успешно восстановить.

--inserts

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

--load-via-partition-root

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

--lock-wait-timeout=timeout

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

--no-comments

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

--no-publications

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

--no-security-labels

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

--no-subscriptions

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

--no-sync

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

--no-table-access-method

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

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

--no-tablespaces

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

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

--no-toast-compression

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

--no-unlogged-table-data

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

--on-conflict-do-nothing

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

--quote-all-identifiers

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

--rows-per-insert=nrows

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

--section=sectionname

Только выгрузите указанный раздел. Имя раздела может быть pre-data, data или post-data. Эту опцию можно указать несколько раз, чтобы выбрать несколько разделов. По умолчанию выгружаются все разделы.

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

--serializable-deferrable

Используйте транзакцию serializable для дампа, чтобы гарантировать, что снимок, используемый, согласуется с последующими состояниями базы данных; но сделайте это, дождавшись момента в потоке транзакций, когда не могут быть присутствовать аномалии, чтобы не было риска сбоя дампа или отката других транзакций с serialization_failure. См. Глава 13 для получения дополнительной информации о изоляции транзакций и контроле параллелизма.

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

Этот параметр не будет иметь никакого значения, если нет активных чтение-запись транзакций при запуске pg_dump. Если активны чтение-запись транзакции, начало дампа может быть отложено на неопределенное время. После запуска производительность с этим параметром или без него будет одинаковой.

--snapshot=snapshotname

Используйте указанный синхронизированный снимок при создании дампа базы данных (см. Таблица 9.94 для получения более подробной информации).

Этот параметр полезен, когда требуется синхронизировать дамп с логическим слотом репликации (см. Глава 47) или с параллельной сессией.

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

--strict-names

Требовать, чтобы каждый шаблон расширения (-e/--extension), схемы (-n/--schema) и таблицы (-t/--table) соответствовал хотя бы одному расширению/схеме/таблице в базе данных, которую нужно выгрузить. Обратите внимание, что если ни один из шаблонов расширения/схемы/таблицы не найдет совпадений, pg_dump сгенерирует ошибку даже без --strict-names.

Этот параметр не влияет на -N/--exclude-schema, -T/--exclude-table, или --exclude-table-data. Неудачное сопоставление исключающего шаблона с какими-либо объектами не считается ошибкой.

--table-and-children=pattern

Это то же самое, что и -t/--table опция, за исключением того, что она также включает любые секции или унаследованные дочерние таблицы таблицы (таблиц), соответствующие шаблону.

--use-set-session-authorization

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

-?
--help

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

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

-d dbname
--dbname=dbname

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

-h host
--host=host

Указывает имя хоста машины, на которой работает сервер. Если значение начинается с косой черты, оно используется в качестве каталога для Unix-доменного сокета. Значение по умолчанию берется из переменной среды PGHOST, если она установлена, в противном случае выполняется попытка подключения через Unix-доменный сокет.

-p port
--port=port

Определяет TCP-порт или расширение локального файла сокета Unix, на котором сервер прослушивает соединения. По умолчанию используется переменная окружения PGPORT, если она установлена, или скомпилированное значение по умолчанию.

-U username
--username=username

Имя пользователя для подключения.

-w
--no-password

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

-W
--password

Принудите pg_dump запросить пароль перед подключением к базе данных.

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

--role=rolename

Указывает имя роли, которое будет использоваться для создания дампа. Эта опция заставляет pg_dump выполнять команду SET ROLE rolename после подключения к базе данных. Это полезно, когда аутентифицированный пользователь (указанный с помощью -U) не имеет привилегий, необходимых для pg_dump, но может переключиться на роль с требуемыми правами. Некоторые установки имеют политику против прямого входа в систему в качестве суперпользователя, и использование этой опции позволяет создавать дампы без нарушения политики.

Окружение

PGDATABASE
PGHOST
PGOPTIONS
PGPORT
PGUSER

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

PG_COLOR

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

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

Диагностика

pg_dump внутренне выполняет SELECT запросы. Если у вас возникли проблемы с запуском pg_dump, убедитесь, что вы можете выбирать информацию из базы данных, используя, например, psql. Кроме того, будут применяться любые настройки соединения по умолчанию и переменные окружения, используемые библиотекой libpq.

Вся активность базы данных pg_dump обычно собирается системой накопительной статистики. Если это нежелательно, вы можете установить параметр track_counts в значение false через PGOPTIONS или команду ALTER USER.

Примечания

Если в вашем кластере баз данных есть локальные дополнения к базе данных template1, будьте осторожны при восстановлении вывода команды pg_dump в действительно пустую базу данных; в противном случае вы можете получить ошибки из-за дублирования определений добавленных объектов. Чтобы создать пустую базу данных без каких-либо локальных дополнений, скопируйте из template0, а не из template1, например:

CREATE DATABASE foo WITH TEMPLATE template0;

Когда выбрана опция --disable-triggers и выбрана только выгрузка данных, pg_dump генерирует команды для отключения триггеров на пользовательских таблицах перед вставкой данных, а затем команды для их повторного включения после вставки данных. Если восстановление останавливается посередине, системные каталоги могут остаться в неправильном состоянии.

Файл дампа, созданный приложением pg_dump, не содержит статистику, используемую оптимизатором для принятия решений о планировании запросов. Поэтому рекомендуется запустить команду ANALYZE после восстановления из файла дампа, чтобы обеспечить оптимальную производительность; см. Раздел 24.1.3 и Раздел 24.1.6 для получения дополнительной информации.

Поскольку pg_dump используется для передачи данных на более новые версии PostgreSQL, можно ожидать, что вывод pg_dump будет загружаться в более новые версии сервера PostgreSQL, чем версия pg_dump. pg_dump также может выполнять выгрузку из серверов PostgreSQL, старше его собственной версии. (В настоящее время поддерживаются серверы начиная с версии 9.2.) Однако pg_dump не может выполнять выгрузку из серверов PostgreSQL, более новых, чем его собственная основная версия; вместо этого он откажется даже попытаться, чтобы не рисковать созданием недопустимой выгрузки. Кроме того, не гарантируется, что вывод pg_dump можно загрузить в сервер более старой основной версии - даже если выгрузка была выполнена из сервера этой версии. Загрузка файла выгрузки в более старый сервер может потребовать ручного редактирования файла выгрузки для удаления синтаксиса, не понятного более старому серверу. Рекомендуется использовать опцию --quote-all-identifiers в случае перехода между версиями, так как она может предотвратить проблемы, возникающие из-за различных списков зарезервированных слов в разных версиях PostgreSQL.

При выгрузке подписок на логическую репликацию, pg_dump сгенерирует команды CREATE SUBSCRIPTION, которые используют опцию connect = false, чтобы при восстановлении подписки не устанавливались удаленные соединения для создания слота репликации или для начального копирования таблицы. Таким образом, дамп можно восстановить без необходимости сетевого доступа к удаленным серверам. Затем пользователю необходимо повторно активировать подписки подходящим образом. Если участвующие хосты изменились, возможно, потребуется изменить информацию о подключении. Также может быть целесообразно очистить целевые таблицы перед началом нового полного копирования таблицы. Если пользователи намерены копировать начальные данные во время обновления, они должны создать слот с опцией two_phase = false. После начальной синхронизации опция two_phase будет автоматически включена подписчиком, если подписка изначально была создана с опцией two_phase = true.

Примеры

Для создания резервной копии базы данных с именем mydb в файле SQL-скрипта:

$ pg_dump mydb > db.sql

Чтобы перезагрузить такой скрипт в (только что созданную) базу данных с именем newdb:

$ psql -d newdb -f db.sql

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

$ pg_dump -Fc mydb > db.dump

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

$ pg_dump -Fd mydb -f dumpdir

Для создания резервной копии базы данных в формате архива в каталоге параллельно с 5 рабочими процессами:

$ pg_dump -Fd mydb -j 5 -f dumpdir

Чтобы перезагрузить архивный файл в (свеже созданную) базу данных с именем newdb:

$ pg_restore -d newdb db.dump

Чтобы перезагрузить файл архива в ту же базу данных, из которой он был выгружен, отбросив текущее содержимое этой базы данных:

$ pg_restore -d postgres --clean --create db.dump

Для создания резервной копии одной таблицы с именем mytab:

$ pg_dump -t mytab mydb > db.sql

Для выгрузки всех таблиц, имена которых начинаются с emp в схеме detroit, за исключением таблицы с именем employee_log:

$ pg_dump -t 'detroit.emp*' -T detroit.employee_log mydb > db.sql

Для выгрузки всех схем, имена которых начинаются с east или west и заканчиваются на gsm, исключая схемы, имена которых содержат слово test:

$ pg_dump -n 'east*gsm' -n 'west*gsm' -N '*test*' mydb > db.sql

То же самое, используя обозначение регулярного выражения для объединения переключателей:

$ pg_dump -n '(east|west)*gsm' -N '*test*' mydb > db.sql

Для выгрузки всех объектов базы данных, кроме таблиц, имена которых начинаются с ts_:

$ pg_dump -T 'ts_*' mydb > db.sql

Чтобы указать имя в верхнем или смешанном регистре в -t и связанных переключателях, вам нужно заключить имя в двойные кавычки; иначе оно будет преобразовано в нижний регистр (см. Patterns). Но двойные кавычки являются специальными символами для оболочки, поэтому их также нужно экранировать. Таким образом, чтобы выгрузить одну таблицу с именем в смешанном регистре, вам нужно что-то вроде

$ pg_dump -t "\"MixedCaseName\"" mydb > mytab.sql

См. также

pg_dumpall, pg_restore, psql