pg_dump
Эта страница переведена при помощи нейросети GigaChat.
Изменено поведение оригинальной утилиты. Изменения описаны в рамках подраздела «Доработки Pangolin».
В подразделе «Совместимость утилит» приведено описание совместимости утилит при использовании различных версий клиентской и серверной частей СУБД Pangolin.
Синтаксис
pg_dump [connection-option...] [option...] [dbname]
Описание
pg_dump
— утилита для резервного копирования базы данных PostgreSQL. Она создает согласованные резервные копии даже при параллельном использовании базы данных. При этом работа других пользователей (чтение и запись данных) не блокируется.
Утилита pg_dump
создает резервную копию только одной базы данных. Чтобы создать резервную копию всего кластера или глобальных объектов, которые относятся ко всем базам данных в кластере (например, роли и табличные пространства), используйте pg_dumpall.
Результаты резервного копирования могут быть представлены в формате SQL-скриптов или архивных файлов. SQL-скрипт — это текстовые файлы, содержащие команды SQL для восстановления базы данных до состояния на момент создания копии. Они воспроизводятся с помощью psql, в том числе на других машинах и архитектурах. С некоторыми изменениями они могут быть адаптированы даже для других СУБД.
Для восстановления данных из архивных форматов файлов используется утилита pg_restore. Форматы архивных файлов позволяют pg_restore
выбирать элементы для восстановления и изменения их порядка. Они предназначены для переноса между архитектурами.
Использование архивных форматов файлов совместно с pg_restore
и pg_dump
предоставляет гибкий механизм архивирования и передачи. Сначала база данных архивируется с помощью pg_dump
, а затем pg_restore
позволяет анализировать архив и восстанавливать только необходимые части. Наиболее гибкие выходные форматы файлов — это форматы custom
(-Fc
) и directory
(-Fd
). Они позволяют выбирать и изменять порядок всех объектов, поддерживают параллельное восстановление и сжимаются по умолчанию. Только формат directory
поддерживает параллельное создание выгрузки.
Во время работы pg_dump
следите за сообщениями об ошибках и предупреждениях, которые выводятся в стандартный поток ошибок, особенно учитывая перечисленные ниже ограничения.
Доработки Pangolin
Изменено поведение утилиты при использовании параметра -c
/--clean
:
- Команды
DROP
, для удаления существующих объектов базы данных, не генерируются при формировании защищенного дампа. - Если указаны оба ключа
-c
и-С
одновременно, командаDROP DATABASE
также не будет сформирована. Восстановление дампа необходимо выполнять в другую предварительно созданную БД из шаблонаtemplate0
с установленным расширениемsecret_dump
.
В текущей версии операции постановки под защиту для схемы public
и ее объектов не выгружаются.
Совместимость утилит
Утилиты 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_dump
существуют следующие параметры командной строки:
dbname
- Задает имя базы данных, которую необходимо выгрузить. Если параметр не указан, используется переменная окружения
PGDATABASE
. Если она не установлена, применяется имя пользователя, указанное для подключения.
-a
--data-only
- Выгружает только данные, исключая схему (определения данных). Данные таблицы, большие объекты и значения последовательностей будут выгружены.
Параметр похожа на
--section = data
, но не идентичен ему.
-b
--large-objects
--blobs
(устаревший параметр)- Включает большие объекты в выгрузку. Это поведение по умолчанию, за исключением случаев, когда указаны
-B
--no-large-objects
--no-blobs
(устаревший параметр)- Исключает большие объекты из выгрузки.
Когда указаны оба параметра
-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
, что позволяет указывать подстановочные символы. При использовании таких символов, убедитесь, чтоpattern
заключен в кавычки, чтобы избежать его обработки оболочкой.Любые конфигурационные данные, зарегистрированные через
pg_extension_config_dump
, включаются в выгрузку, если соответствующее расширение указано в параметре--extension
.ПримечаниеКогда
-e
указан,pg_dump
не выгружает другие объекты базы данных, от которых могут зависеть выбранные расширения. Это означает, что восстановление выгрузки расширения в чистой базе данных не гарантирует его работоспособность.
-E encoding
--encoding = encoding
- Создает выгрузку с указанной кодировкой символов. По умолчанию используется кодировка базы данных.
Другой способ задать кодировку — установить переменную окружения PGCLIENTENCODING
для требуемой кодировки выгрузки.
-f file
--file=file
- Отправляет вывод в указанный файл. Параметр пропускается для выходных форматов, основанных на файлах, в случае которых используется стандартный вывод. Для формата
directory
этот параметр обязателен, так как вместо файла указывается целевой каталог. В этом случае каталог создается с помощьюpg_dump
и не должен существовать до этого.
-F format
--format=format
- Выбирает формат вывода.
format
может принимать следующие значения:p
plain
: Обычный текстовый файл SQL-скрипта (по умолчанию).c
custom
: Архивный формат, пригодный для использования утилитойpg_restore
. Формат позволяет вручную выбирать и сортировать восстанавливаемые объекты, сжат по умолчанию.d
directory
: Архив в формате каталога, подходящий для ввода вpg_restore
. В созданном каталоге для каждой таблицы и большого объекта создается отдельный файл, также создается файл оглавления в машинно-читаемом формате. С полученной резервной копией можно работать средствами Unix (например, файлы в несжатом архиве могут быть сжаты с помощью инструментаgzip
,lz4
илиzstd
). Формат сжат по умолчанию с использованиемgzip
и также поддерживает многопоточный режим.t
tar
: Архив в форматеtar
для дальнейшего использования утилитойpg_restore
. Форматtar
совместим с форматом каталога: извлечение архива в форматеtar
создает допустимый архив в формате каталога. Форматtar
не поддерживает сжатие. При его использовании нельзя изменить относительный порядок элементов данных во время восстановления.
-j njobs
--jobs=njobs
- Запускает выгрузку параллельно, одновременно сбрасывает в количестве
njobs
таблиц. Этот параметр сокращает время, необходимое для выполнения выгрузки, но увеличивает нагрузку на сервер. Параметр используется только с форматомdirectory
, так как в нем несколько процессов могут записывать данные одновременно.примечаниеУбедитесь, что параметр max_connections имеет достаточно высокое значение, чтобы вместить все соединения, так как утилита
pg_dump
откроетnjobs
+ 1 соединений с базой данных.Запрос эксклюзивных блокировок на объекты базы данных при выполнении параллельной выгрузки может привести к сбою. Процесс лидера
pg_dump
запрашивает общие блокировки на объектах, которые рабочие процессы будут позже сбрасывать, чтобы предотвратить их удаление во время выполнения выгрузки. Если другой клиент запрашивает эксклюзивную блокировку на таблицу, она не будет предоставлена до тех пор, пока не освободится общая блокировка, что может вызвать взаимоблокировку. Чтобы предотвратить это, рабочий процессpg_dump
использует параметрNOWAIT
. Если рабочему процессу не предоставляется общая блокировка, значит, была запрошена еще одна эксклюзивная блокировка, и выгрузка не может продолжиться.Для выполнения параллельной выгрузки сервер базы данных должен поддерживать синхронизированные снимки, функцию, которая была представлена в PostgreSQL версии 9.2 для основных серверов и версии 10 для резервных копий. Это гарантирует, что все соединения видят одинаковые данные, что предотвращает создание несогласованных резервных копий.
pg_dump -j
использует множественные подключения. Первое подключение осуществляется головным процессом, а последующие — рабочими процессами (для гарантии, что каждое подключение увидит одни и те же данные).
-n pattern
--schema=pattern
- Выгружает схемы, соответствующие шаблону
pattern
и все объекты в этих схемах. Если параметр не указан, в выгрузку попадают все несистемные схемы в целевой базе данных. Параметр можно указать несколько раз для выгрузки нескольких схем.Шаблон
pattern
интерпретируется так же, как в командах\d
вpsql
, что позволяет указывать подстановочные символы. Более подробно показано ниже в разделе «Примеры».ПримечаниеПри использовании параметра утилита
pg_dump
не выгружает объекты других схем, от которых выгружаемая схема может зависеть (не гарантируется, что выгруженная схема будет успешно восстановлена). Не принадлежащие схемам объекты (например, большие объекты) не выгружаются.Объекты без схемы, например, большие бинарные объекты, не сбрасываются при указании параметра
-n
. Можно добавить их обратно в выгрузку с помощью параметра---large-objects
.
-N pattern
--exclude-schema=pattern
- Не выгружает схемы, соответствующие шаблону
pattern
. Шаблон интерпретируется согласно тем же правилам, что и для-n
. Параметр-N
может быть задан более одного раза для исключения схем, соответствующих нескольким шаблонам.При одновременном использовании параметров
-n
и-N
будут выгружаться схемы, соответствующие хотя бы одному шаблону-n
и не соответствующие ни одному шаблону-N
. Если указан только параметр-N
, то схемы, соответствующие шаблону-N
, исключаются из выгрузки.
-O
--no-owner
- Отменяет формирование команд, устанавливающих владельца базы данных. По умолчанию утилита
pg_dump
генерирует командыALTER OWNER
илиSET SESSION AUTHORIZATION
для назначения владельца объектов БД. Эти команды не будут выполняться при запуске сценария, если он запущен не суперпользователем или владельцем объектов.Параметр используется, чтобы создать скрипт, который можно выполнить при восстановлении от лица произвольного пользователя и назначить его в владельцем объектов восстанавливаемой базы.
Параметр игнорируется при создании архивного выходного файла. Для таких форматов укажите этот параметр при вызове
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
- Выгружает только таблицы, соответствующие шаблону
pattern
. Шаблонpattern
интерпретируется так же, как в командах\d
вpsql
, что позволяет указывать подстановочные символы. Более подробно показано ниже в разделе «Примеры».Параметр также выгружает определения соответствующих шаблону последовательностей, представлений, материализованных представлений и сторонних таблиц. При этом содержимое представлений и материальных представлений не выгружается, а содержимое сторонних таблиц будет выгружено, только если в аргументе
--include-foreign-data
указан соответствующий внешний сервер.При использовании
-t
параметры-n
и-N
игнорируются, потому что таблицы, выбранные с помощью-t
, будут выгружены независимо от них, а не табличные объекты не будут выгружаться.ПримечаниеПри использовании параметра
-t
утилитаpg_dump
не выгружает прочие объекты, от которых выгружаемые таблицы могут зависеть (не гарантируется, что выгруженные таблицы будут успешно восстановлены).
-T pattern
--exclude-table=pattern
- Не выгружает никакие таблицы, соответствующие шаблону
pattern
. Шаблон интерпретируется согласно тем же правилам, что и для-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
.Если уровень сжатия не указан, используется уровень сжатия по умолчанию. Если указан только уровень без упоминания алгоритма, то при уровне выше
0
будет использовано сжатиеgzip
, а при уровне0
сжатие не будет применяться вообще.Для форматов архивов
custom
иdirectory
это указывает на сжатие отдельных сегментов данных таблиц, причем по умолчанию используется сжатие методом gzip со средним уровнем. Для обычного текстового вывода установка ненулевого уровня сжатия приводит к сжатию всего выходного файла так, будто он был пропущен через gzip, lz4 или zstd, однако по умолчанию сжатие не применяется. С использованием zstd-сжатия режим long может улучшить коэффициент сжатия, но ценой увеличения объема используемой памяти.
Формат архива tar пока не поддерживает сжатие вообще.
--binary-upgrade
- Параметр для утилит обновления сервера. Использование для других целей не поддерживается Поведение параметра может измениться в будущих выпусках без предварительного уведомления.
--column-inserts
--attribute-inserts
- Выгружает данные таблиц с явным указанием столбцов. Команды
INSERT
будут иметь видINSERT INTO table (column, ...) VALUES ...
. Скорость восстановления заметно снижается. Параметр используется для создания выгрузок, которые будут загружены в базы данных, отличные от PostgreSQL. В случае ошибок будут утеряны только строкиINSERT
, в которых возникли ошибки, а не все содержимое таблицы.
--disable-dollar-quoting
- Запрещает заключать тела функции в знаки доллара
$
. Тело функции заключается в кавычки, используя стандартный синтаксис SQL.
--disable-triggers
- Формирует команды для временного отключения триггеров в целевых таблицах во время восстановления, применяется только для выгрузки данных.
Параметр используется, когда есть проверки ссылочной целостности или другие триггеры, которые нужно выключить на время восстановления данных.
Команды, генерируемые с параметром
--disable-triggers
, должны выполняются суперпользователем (нужно указать имя суперпользователя в параметре-S
или выполнять скрипт от имени суперпользователя).Параметр игнорируется при создании архивного выходного файла. Для таких форматов укажите этот параметр при вызове
pg_restore
.
--enable-row-security
- Включает защиту строк, применяется для выгрузки содержимого таблицы, которая имеет защиту строк.
По умолчанию
pg_dump
устанавливает дляrow_security
значениеoff
, чтобы убедиться, что все данные выгружены из таблицы. Если у пользователя нет достаточных прав для обхода защиты строк, то выдается ошибка. С--enable-row-security
утилитаpg_dump
включает параметрrow_security
, что позволяет пользователю выгружать части содержимого таблицы, к которым он имеет доступ.Внимание!В настоящий момент необходимо, чтобы данные были выгружены в формате
INSERT
(COPY FROM
не поддерживает защиту строк).
--exclude-extension=pattern
Не выполнять выгрузку никаких расширений, соответствующих шаблону pattern. Шаблон интерпретируется согласно тем же правилам, что и для параметра -e
. Переключатель --exclude-extension
может быть указан более одного раза, чтобы исключить расширения, соответствующие любому из нескольких шаблонов.
При одновременном указании обоих параметров -e
и --exclude-extension
поведение заключается в выгрузке только тех расширений, которые соответствуют хотя бы одному переключателю -e
, но ни одному из переключателей --exclude-extension
. Если --exclude-extension
указан без -e
, тогда расширения, соответствующие --exclude-extension
, исключаются из того, что иначе является нормальной выгрузкой.
--exclude-table-and-children=pattern
Это аналогично опции -T
/--exclude-table
, за исключением того, что она также исключает любые разделенные или дочерние таблицы наследования таблиц, соответствующих шаблону pattern.
--exclude-table-data=pattern
- Отменяет выгрузку таблиц, соответствующих шаблону
pattern
. Параметр можно указать несколько раз для исключения таблиц, соответствующих разным шаблонам. Используется, когда нужно определение таблицы без содержимого.Используйте
--schema-only
, чтобы исключить содержимое всех таблиц базы данных.
--exclude-table-data-and-children=pattern
- Аналогична опции
--exclude-table-data
, за исключением того, что она также исключает данные любых разделенных или дочерних таблиц наследования таблиц, соответствующих шаблону pattern.
--extra-float-digits=ndigits
- Использовать указанное вами значение
extra_float_digits
при выгрузке данных с плавающей точкой вместо максимально доступной точности. Регулярные резервные копии не должны использовать эту опцию.
--filter=filename
Укажите имя файла, из которого нужно прочитать шаблоны для включения или исключения объектов из выгрузки. Шаблоны интерпретируются согласно тем же правилам, что и соответствующие параметры: -t
/--table
, --table-and-children
, -T
/--exclude-table
, и --exclude-table-and-children
для таблиц, -n
/--schema
и -N
/--exclude-schema
для схем, --include-foreign-data
для данных на удаленных серверах, --exclude-table-data
и --exclude-table-data-and-children
для данных таблиц и -e
/--extension
и --exclude-extension
для расширений. Чтобы читать из STDIN, используйте - в качестве имени файла. Опцию --filter
можно указывать совместно с перечисленными выше параметрами для включения или исключения объектов и также можно указать ее более одного раза для множества файлов фильтров.
Файл перечисляет один шаблон объекта в каждой строке, со следующим форматом:
{ include | exclude } { extension | foreign_data | table | table_and_children | table_data | table_data_and_children | schema } PATTERN
Первое ключевое слово указывает, следует ли включать объекты, соответствующие шаблону, или исключать их. Второе ключевое слово определяет тип объектов для фильтрации по шаблону:
extension
– расширения. Работает аналогично опции-e
/--extension
или--exclude-extension
.foreign_data
– данные на внешних серверах. Работает аналогично опции--include-foreign-data
. Это ключевое слово может использоваться только совместно с ключевым словомinclude
.table
– таблицы. Работает аналогично опциям-t
/--table
или-T
/--exclude-table
.table_and_children
– таблицы включая любые разделы или дочерние таблицы наследования. Работает аналогично опциям--table-and-children
или--exclude-table-and-children
.table_data
– табличные данные любых таблиц, соответствующих шаблону pattern. Работает аналогично опции--exclude-table-data
. Это ключевое слово можно использовать только совместно с ключевым словомexclude
.table_data_and_children
– табличные данные любых таблиц, соответствующих шаблонуpattern
, а также любых разделов или дочерних элементов наследования этих таблиц. Работает аналогично опции--exclude-table-data-and-children
. Это ключевое слово можно использовать только совместно с ключевым словомexclude
.schema
– схемы. Работает аналогично опциям-n
/--schema
или-N
/--exclude-schema
.
Строки, начинающиеся с #
, считаются комментариями и игнорируются. Комментарии могут размещаться после строки шаблона объекта. Пустые строки также игнорируются. См. раздел «Шаблоны» о том, как выполнять экранирование в шаблонах.
Примеры файлов приведены ниже в разделе «Примеры».
--if-exists
- Добавляет проверки в команды удаления, не действует без указания
--clean
. Утилитаpg_dump
использует командыDROP ... IF EXISTS
для удаления объектов в режиме--clean
. При использовании параметра возможные ошибкиdoes not exist
не выводятся.
--include-foreign-data=foreign_server
- Выгружает данных всех сторонних таблиц со сторонних серверов, соответствующих шаблону
foreign_server
. Параметр можно указать несколько раз для выгрузки со сторонних серверов, соответствующих разным шаблонам (шаблон не может быть пустым).foreign_server
интерпретируется так же, как в командах\d
в psql. Поэтому можно выбрать несколько сторонних серверов, используя символы подстановки в шаблоне.При использовании символов подстановки убедитесь, что
foreign_server
заключен в кавычки, чтобы избежать его обработки оболочкой. Более подробно показано ниже в разделе «Примеры». Пустой шаблон запрещен.ПримечаниеПри использовании параметра утилита
pg_dump
не проверяет возможность записи в стороннюю таблицу. Поэтому не гарантируется успешное восстановление этой таблицы.
--inserts
- Выгружает данные в виде команд
INSERT
вместоCOPY
.Скорость восстановления заметно снижается. Параметр используется для создания выгрузок, которые будут загружены в базы данных, отличные от PostgreSQL. В случае ошибок будут утеряны только строкиINSERT
, в которых возникли ошибки, а не все содержимое таблицы. Восстановление может завершиться неудачно, если у таблицы изменен порядок столбцов (используйте параметр--column-inserts
, чтобы избежать этого).
--load-via-partition-root
- Формирует команды
COPY
илиINSERT
, ссылающихся на корневую таблицу в иерархии партиционирования.При загрузке данных подходящая партиция выбирается заново для каждой строки. Полезно при восстановлении данных, когда на целевом сервере строки не всегда попадают в те же партиции, в которых они находились на исходном. Это возможно, например, если столбец партиционирования имеет текстовый тип, и две системы имеют разные определения правил сортировки, по которому упорядочивается этот столбец.
--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
- Принудительно заключает все идентификаторы в кавычки.Совет
Используйте при выгрузке базы данных с сервера, основная версия PostgreSQL которого отличается от версии
pg_dump
, или когда копия предназначена для загрузки на сервер другой основной версии.По умолчанию
pg_dump
заключает в кавычки зарезервированные идентификаторы для своей основной версии, что приводит к ошибкам совместимости с серверами других версий (множество зарезервированных идентификаторов может отличаться). Использование--quote-all-identifiers
предотвращает такие проблемы, но ухудшается читаемость скрипта с данными.
--rows-per-insert = n_rows
- Указывает максимальное количеством строк в команде
INSERT
(сохраняет данные в виде командINSERT
, а неCOPY
). Значение должно быть больше 0. В случае ошибок будут утеряны только строкиINSERT
, в которых возникли ошибки, а не все содержимое таблицы.
--section=section_name
- Выгружает только указанный раздел. Параметр можно указать несколько раз для выгрузки нескольких разделов. По умолчанию выгружается весь раздел.
Имя раздела может принимать значения:
data
содержит данные таблиц, больших объектов и значения последовательностей.pre-data
содержит определения индексов, триггеров, правил и ограничений, кроме ограничений проверки, кроме проверенных.post-data
содержит все остальные определения данных.
--serializable-deferrable
- Использует при выгрузке транзакцию с уровнем изоляции
serializable
, чтобы получить снимок, согласованный с будущими состояниями базы.Внимание!Дождитесь момента, когда в потоке транзакций отсутствуют аномалии, чтобы избежать сбоев при выгрузке и минимизировать риск отката других транзакций из-за ошибки
serialization_failure
.Подробнее о изоляции транзакций и управлении конкуренцией можно ознакомиться в разделе «Управление конкурентным доступом».
Параметр не подходит для восстановления после сбоя, но применяется при создании копии базы данных для формирования отчетов и других операций чтения, пока основная база продолжает работать. Без него выгрузка может зафиксировать несогласованное состояние данных. Например, при пакетной обработке статус пакета может быть отмечен как завершенный, но выгруженные данные окажутся неполными.
Если во время запуска
pg_dump
нет активных транзакций на чтение-запись, параметр не повлияет на результат. При наличии таких транзакций начало выгрузки может задержаться на неопределенное время. После старта выгрузки производительность с этим параметром и без него будет одинаковой.
--snapshot=snapshot_name
- Использует указанный синхронизированный снимок при выгрузке базы данных.
Параметр подходит при необходимости синхронизировать выгрузку с логической репликацией или с другим параллельно выполняемым сеансом.
При параллельной выгрузке указанное имя снимка, новый снимок создаваться не будет.
--strict-names
- Требует, чтобы каждый шаблон расширения (
-e
/--extension
), схемы (-n
/--schema
) и таблицы (-t
/--table
) соответствовал хотя бы одному расширению/схеме/таблице в базе данных, подлежащей выгрузке. Это также относится к фильтрам, используемым с--filter
. Обратите внимание, что если ни один из шаблонов расширения/схемы/таблицы не находит совпадений,pg_dump
выдаст ошибку даже без указания--strict-names
.Параметр не влияет на параметры исключения
-N
/--exclude-schema
,-T
/--exclude-table
или--exclude-table-data
. Если объекты, соответствующие шаблонам исключения, отсутствуют, это не считается ошибкой.
--sync-method=method
- При установке в
fsync
, что является значением по умолчанию,pg_dump --format=directory
рекурсивно открывает и синхронизирует все файлы в каталоге архива.
На Linux вместо этого можно использовать syncfs
, чтобы попросить операционную систему синхронизировать всю файловую систему, содержащую каталог архива. См. информацию о предостережениях, связанных с использованием syncfs
, в описании параметра recovery_init_sync_method
.
Этот параметр не имеет эффекта, если используется --no-sync
или --format
не установлен в directory
.
--table-and-children=pattern
- То же самое, что и опция
-t
/--table
, за исключением того, что она также включает любые дочерние таблицы наследования или партиционирования таблиц, соответствующих выражениюpattern
.
--use-set-session-authorization
- Формирует команды
SET SESSION AUTHORIZATION
вместо командALTER OWNER
для назначения владельцев объектов. Для использования параметра требуются права суперпользователя.Такой подход делает выгрузку более стандартизированной, но может привести к некорректному восстановлению, если изменялась история владения объектами.
-?
--help
- Показывает справку о параметрах командной строки утилиты
pg_dump
и завершается.
-d dbname
--dbname=dbname
- Задает имя базы данных для подключения. Равнозначно указанию
dbname
как первого параметра без ключа в командной строке.dbname
может быть строкой подключения. В этом случае параметры строки подключения имеют приоритет над одноименными параметрами командной строки.
-h host
--host = host
- Указывает хост компьютера, на котором запущен сервер. Значение по умолчанию берется из переменной окружения
PGHOST
. Если она не установлена, выполняется подключение к Unix-сокету (каталог Unix-сокета начинается с косой черты).
-p port
--port = port
- Указывает TCP-порт или расширение файла локального Unix-сокета для подключения к серверу. Значение по умолчанию берется из переменной окружения
PGPORT
или задается при компиляции.
-U username
--username=username
- Указывает имя пользователя для подключения.
-w
--no-password
- Отключает запрос на ввод пароля. Если сервер требует аутентификации по паролю и пароль недоступен другими способами, такими как файл
.pgpass
, попытка подключения завершится неудачей. Параметр полезен в пакетных заданиях и сценариях, где нет пользователя, который мог бы ввести пароль.
-W
--password
- Запрашивает пароль перед подключением к основному серверу.
Параметр не является обязательным, поскольку
pg_dump
автоматически запросит пароль, если сервер требует аутентификацию паролем. Однако утилита потратит попытку подключения, чтобы выяснить, что сервер хочет пароль. В некоторых случаях стоит ввести-W
, чтобы избежать дополнительной попытки подключения.
--role=role_name
- Задает роль, от имени которой будет выполняться выгрузка. После подключения
pg_dump
выполняет командуSET ROLE role_name
. Это полезно, если указанный пользователь (-U
) не имеет необходимых привилегий, но может переключиться на соответствующую роль. В некоторых средах прямое подключение суперпользователя запрещено, и этот параметр позволяет выполнить выгрузку, соблюдая ограничения.
Переменные окружения
Утилита поддерживает переменные окружения:
PGDATABASE
PGHOST
PGOPTIONS
PGPORT
PGUSER
PG_COLOR
PG_COLOR
указывает, использовать ли цвет в диагностических сообщениях. Возможные значения — always
, auto
и never
.
Утилита pg_dump
использует переменные окружения, поддерживаемые libpq
.
Диагностика
На низком уровне pg_dump
выполняет команды SELECT
. Если при работе утилиты возникают проблемы, рекомендуется проверить возможность выполнения SELECT
, например из psql. Используются все настройки подключения по умолчанию и переменные окружения, применяемые клиентской библиотекой libpq
.
По умолчанию действия pg_dump
фиксируются в системе накопительной статистики. Чтобы отключить сбор статистики, установите для параметра track_counts
значениеfalse
через переменную окружения PGOPTIONS
или с помощью команды ALTER USER
.
Примечания
Если в шаблонной базе template1
создавались дополнительные объекты, убедитесь, что выгрузка загружается в пустую базу. В противном случае возможны ошибки из-за дублирования объектов. Чтобы создать чистую базу, следует использовать template0
вместо template1
:
CREATE DATABASE foo WITH TEMPLATE template0;
Если выгружаются только данные с параметром --disable-triggers
, pg_dump
автоматически отключит триггеры перед вставкой данных и включит их после. Но если восстановление прервется, системные каталоги могут остаться в некорректном состоянии.
Файл выгрузки не содержит статистики, используемой планировщиком запросов. Поэтому после восстановления рекомендуется выполнить команду ANALYZE
для оптимизации производительности.
Совместимость версий
При использовании pg_dump
важно учитывать ограничения на перенос данных между разными версиями сервера. Основные правила следующие:
- Выгруженные данные можно загрузить на новую версию сервера.
pg_dump
поддерживает выгрузку данных из старых версий сервера (начиная с PostgreSQL 9.2).- Утилита не выгружает данные с серверов более новых основных версий.
- Не гарантируется, что выгруженные данные корректно загрузятся в старую версию сервера. В некоторых случаях может потребоваться ручное редактирование файла для исправления несовместимого синтаксиса.
При работе с разными версиями рекомендуется использовать параметр --quote-all-identifiers
, чтобы избежать проблем с изменением зарезервированных слов между версиями PostgreSQL.
Выгрузка логических подписок репликаций
При выгрузке подписок pg_dump
добавляет параметр connect=false
в команды CREATE SUBSCRIPTION
для предотвращения автоматического создание слота репликации и начального копирования таблиц при восстановлении, что позволяет выполнить процесс без сетевого доступа к удаленным серверам.
После восстановления подписки должны быть активированы вручную. Если адреса серверов изменились, возможно, потребуется обновить параметры подключения. Также может потребоваться очистка целевых таблиц перед повторным копированием данных.
Если требуется копировать исходные данные при обновлении, следует создать слот репликации с параметром two_phase = false
. После завершения начальной синхронизации параметр two_phase
включится автоматически, если он был задан в подписке.
Примеры
Выгрузка базы данных mydb
в файл SQL-скрипта:
$ pg_dump mydb > db.sql
Восстановление из полученного скрипта в чистую базу данных newdb
:
$ psql -d newdb -f db.sql
Выгрузка базы данных в специальном формате:
$ pg_dump -Fc mydb > db.dump
Выгрузка базы данных в формате directory
:
$ pg_dump -Fd mydb -f dumpdir
Выгрузка базы данных в формате directory
с 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
, его нужно заключить в кавычки. Так как кавычки являются спецсимволом для оболочки, их также необходимо заключать в дополнительные кавычки:
$ pg_dump -t "\"MixedCaseName\"" mydb > mytab.sql
Для выгрузки всех таблиц, чьи имена начинаются с mytable
, за исключением таблицы mytable2
, укажите файл фильтра filter.txt
следующим образом:
include table mytable*
exclude table mytable2
$ pg_dump --filter=filter.txt mydb > db.sql