pg_restore#
pg_restore
pg_restore — восстановление базы данных Tantor SE из архивного файла, созданного приложением pg_dump
Синтаксис
pg_restore
[connection-option
...] [option
...] [filename
]
Описание
pg_restore - это утилита для восстановления базы данных Tantor SE из архива, созданного pg_dump в одном из форматов, отличных от обычного текста. Она выполняет необходимые команды для восстановления базы данных в состояние, в котором она находилась на момент сохранения. Архивные файлы также позволяют pg_restore выбирать, что восстанавливать, или даже изменять порядок элементов перед восстановлением. Архивные файлы разработаны для переносимости между архитектурами.
pg_restore может работать в двух режимах. Если указано имя базы данных, pg_restore подключается к этой базе данных и восстанавливает содержимое архива непосредственно в базу данных. В противном случае создается скрипт, содержащий SQL-команды, необходимые для восстановления базы данных, и записывается в файл или стандартный вывод. Этот вывод скрипта эквивалентен формату вывода обычного текста pg_dump. Некоторые из опций, управляющих выводом, поэтому аналогичны опциям pg_dump.
Очевидно, pg_restore не может восстановить информацию, которая отсутствует в файле архива. Например, если архив был создан с использованием опции “dump data as INSERT
commands”, pg_restore не сможет загрузить данные с помощью операторов COPY
.
Опции
pg_restore принимает следующие аргументы командной строки.
filename
Указывает местоположение файла архива (или каталога для архива в формате каталога), который будет восстановлен. Если не указано, используется стандартный ввод.
-a
--data-only
Восстановить только данные, а не схему (определения данных). Восстанавливаются данные таблицы, большие объекты и значения последовательностей, если они присутствуют в архиве.
Эта опция похожа, но по историческим причинам не идентична указанию
--section=data
.-c
--clean
Перед восстановлением объектов базы данных выполните команды
DROP
для всех объектов, которые будут восстановлены. Этот параметр полезен для перезаписи существующей базы данных. Если какие-либо объекты не существуют в целевой базе данных, будут выведены игнорируемые сообщения об ошибках, если не указана опция--if-exists
.-C
--create
Создайте базу данных перед ее восстановлением. Если также указана опция
--clean
, удалите и пересоздайте целевую базу данных перед подключением к ней.С помощью
--create
--pg_restore также восстанавливает комментарий к базе данных, если таковой имеется, а также любые настройки конфигурационных переменных, специфичные для этой базы данных, то есть любые командыALTER DATABASE ... SET ...
иALTER ROLE ... IN DATABASE ... SET ...
упоминающие эту базу данных. Права доступа к самой базе данных также восстанавливаются, если не указана опция--no-acl
.Когда используется этот параметр, база данных, указанная с помощью
-d
, используется только для выполнения начальных командDROP DATABASE
иCREATE DATABASE
. Все данные восстанавливаются в базу данных, указанную в архиве.-d
dbname
--dbname=
dbname
Подключитесь к базе данных
dbname
и восстановите данные непосредственно в базу данных.dbname
может быть строкой подключения. Если это так, параметры строки подключения переопределят любые конфликтующие параметры командной строки.-e
--exit-on-error
Выход, если произошла ошибка при отправке SQL-команд в базу данных. По умолчанию процесс будет продолжаться и будет отображено количество ошибок в конце восстановления.
-f
filename
--file=
filename
Укажите выходной файл для сгенерированного сценария или для списка, когда используется с
-l
. Используйте-
для stdout.-F
format
--format=
format
Укажите формат архива. Не обязательно указывать формат, так как pg_restore автоматически определит его. Если указан, он можно записать одним из следующих способов:
c
custom
Архив имеет пользовательский формат pg_dump.
d
directory
Архив - это архив каталога.
t
tar
Архив представляет собой архив
tar
.
-I
index
--index=
index
Сохранить только определение именованного индекса. Несколько индексов можно указать с помощью нескольких переключателей
-I
.-j
number-of-jobs
--jobs=
number-of-jobs
Запустите самые трудоемкие шаги pg_restore — те, которые загружают данные, создают индексы или создают ограничения — одновременно, используя до
number-of-jobs
параллельных сессий. Этот параметр может значительно сократить время восстановления большой базы данных на сервере, работающем на многопроцессорной машине. Этот параметр игнорируется при создании скрипта, а не при подключении непосредственно к серверу базы данных.Каждая задача представляет собой один процесс или один поток, в зависимости от операционной системы, и использует отдельное соединение с сервером.
Оптимальное значение для этой опции зависит от аппаратной конфигурации сервера, клиента и сети. Факторы включают количество ядер ЦП и настройку диска. Хорошим местом для начала является количество ядер ЦП на сервере, но значения, большие, чем это, также могут привести к более быстрым временам восстановления во многих случаях. Конечно, слишком высокие значения приведут к снижению производительности из-за трашинга.
Сохраняются только пользовательские и архивные форматы каталога с этой опцией. Ввод должен быть обычным файлом или каталогом (а не, например, каналом или стандартным вводом). Кроме того, нельзя использовать несколько заданий вместе с опцией
--single-transaction
.-l
--list
Содержимое архива: Список содержимого архива. Результат этой операции может быть использован в качестве входных данных для опции
-L
. Обратите внимание, что если используются фильтрующие переключатели, такие как-n
или-t
с опцией-l
, они ограничат перечисленные элементы.-L
list-file
--use-list=
list-file
Восстановите только те элементы архива, которые перечислены в
list-file
, и восстановите их в порядке, в котором они появляются в файле. Обратите внимание, что если используются фильтрующие переключатели, такие как-n
или-t
с-L
, они дополнительно ограничат восстанавливаемые элементы.list-file
обычно создается путем редактирования вывода предыдущей операции-l
. Строки могут быть перемещены или удалены, а также могут быть закомментированы, поставив точку с запятой (;
) в начале строки. См. примеры ниже.-n
schema
--schema=
schema
Сохранить только объекты, которые находятся в указанной схеме. Можно указать несколько схем с помощью нескольких переключателей
-n
. Это можно совместить с опцией-t
, чтобы восстановить только конкретную таблицу.-N
schema
--exclude-schema=
schema
Не восстанавливайте объекты, которые находятся в указанной схеме. Несколько схем, которые нужно исключить, можно указать с помощью нескольких переключателей
-N
.Когда оба
-n
и-N
указаны для одного и того же имени схемы, выигрывает переключатель-N
и схема исключается.-O
--no-owner
Не выводите команды для установки владельца объектов, чтобы соответствовать исходной базе данных. По умолчанию pg_restore выполняет операторы
ALTER OWNER
илиSET SESSION AUTHORIZATION
для установки владельца созданных элементов схемы. Эти операторы не будут выполнены, если начальное подключение к базе данных осуществляется суперпользователем (или тем же пользователем, который владеет всеми объектами в скрипте). С помощью-O
можно использовать любое имя пользователя для начального подключения, и этот пользователь будет владеть всеми созданными объектами.-P
function-name(argtype [, ...])
--function=
function-name(argtype [, ...])
Восстановить только именованную функцию. Будьте внимательны при написании имени функции и аргументов точно так, как они указаны в таблице содержимого файла дампа. Можно указать несколько функций с помощью нескольких переключателей
-P
.-R
--no-reconnect
Эта опция устарела, но все еще принимается для обратной совместимости.
-s
--schema-only
Восстановить только схему (определения данных), а не данные, в той степени, в которой записи схемы присутствуют в архиве.
Этот параметр является обратным для параметра
--data-only
. Он похож на, но по историческим причинам не идентичен, указанию--section=pre-data --section=post-data
.(Не путайте это с опцией
--schema
, которая использует слово “схема” в другом значении).-S
username
--superuser=
username
Укажите имя пользователя суперпользователя, которое будет использоваться при отключении триггеров. Это актуально только в случае использования опции
--disable-triggers
.-t
table
--table=
table
Сохранить определение и/или данные только для указанной таблицы. В этом случае “таблица” включает в себя представления, материализованные представления, последовательности и внешние таблицы. Несколько таблиц могут быть выбраны путем указания нескольких переключателей
-t
. Этот параметр может быть объединен с параметром-n
для указания таблиц(ы) в определенной схеме.Примечание
Когда указана опция
-t
, приложение pg_restore не пытается восстановить другие объекты базы данных, от которых могут зависеть выбранные таблицы. Поэтому нет гарантии, что восстановление конкретной таблицы в чистую базу данных будет успешным.Примечание
Этот флаг не ведет себя идентично флагу
-t
у pg_dump. В настоящее время не предусмотрено возможности использования шаблонов в pg_restore, и нельзя указывать имя схемы в его-t
. Кроме того, в то время как флаг-t
у pg_dump также выполняет выгрузку дополнительных объектов (таких как индексы) выбранных таблиц, флаг-t
у pg_restore не включает такие дополнительные объекты.Примечание
В версиях до PostgreSQL 9.6 этот флаг соответствовал только таблицам, а не любому другому типу отношений.
-T
trigger
--trigger=
trigger
Восстановить только именованный триггер. Можно указать несколько триггеров с помощью нескольких переключателей
-T
.-v
--verbose
Указывает режим подробного вывода. Это заставит pg_restore выводить подробные комментарии к объектам и время их начала/окончания в выходной файл, а также сообщения о прогрессе в стандартный поток ошибок. Повторное использование этой опции приводит к появлению дополнительных сообщений уровня отладки в стандартном потоке ошибок.
-V
--version
Вывести версию pg_restore и завершить работу.
-x
--no-privileges
--no-acl
Предотвратить восстановление привилегий доступа (команды grant/revoke).
-1
--single-transaction
Выполните восстановление как одну транзакцию (то есть оберните выполняемые команды в
BEGIN
/COMMIT
). Это гарантирует, что либо все команды успешно завершатся, либо никакие изменения не будут применены. Этот параметр подразумевает--exit-on-error
.--disable-triggers
Этот параметр актуален только при выполнении восстановления только данных. Он указывает pg_restore выполнить команды для временного отключения триггеров на целевых таблицах во время восстановления данных. Используйте это, если у вас есть проверки целостности ссылок или другие триггеры на таблицах, которые вы не хотите вызывать во время восстановления данных.
В настоящее время команды, генерируемые для
--disable-triggers
, должны выполняться от имени суперпользователя. Поэтому вы также должны указать имя суперпользователя с помощью-S
или, желательно, запустить pg_restore от имени суперпользователя Tantor SE.--enable-large-allocations
Увеличение допустимого размера загрузки ячейки таблицы до
2 ГБ
для типов данныхbytea
иtext
. Этот аргумент активирует параметр конфигурации enable_large_allocations. Также включите этот параметр, когда pg_dump или pg_dumpall были вызваны с опцией--enable-large-allocations
.--enable-row-security
Этот параметр актуален только при восстановлении содержимого таблицы, у которой есть защита строк. По умолчанию, pg_restore устанавливает значение row_security в off, чтобы гарантировать, что все данные будут восстановлены в таблицу. Если у пользователя недостаточно привилегий для обхода защиты строк, то будет сгенерирована ошибка. Этот параметр указывает pg_restore установить значение row_security в on, позволяя пользователю попытаться восстановить содержимое таблицы с включенной защитой строк. Это все равно может завершиться неудачей, если у пользователя нет прав на вставку строк из дампа в таблицу.
Обратите внимание, что в настоящее время для этой опции также требуется, чтобы дамп был в формате
INSERT
, посколькуCOPY FROM
не поддерживает защиту строк.--if-exists
Используйте команды
DROP ... IF EXISTS
для удаления объектов в режиме--clean
. Это подавляет ошибки “не существует”, которые в противном случае могли бы быть сообщены. Этот параметр недействителен, если не указан также--clean
.--no-comments
Не выводить команды для восстановления комментариев, даже если они есть в архиве.
--no-data-for-failed-tables
По умолчанию, данные таблицы восстанавливаются даже если команда создания таблицы не удалась (например, потому что она уже существует). С этой опцией данные для такой таблицы пропускаются. Такое поведение полезно, если целевая база данных уже содержит нужное содержимое таблицы. Например, вспомогательные таблицы для расширений Tantor SE, таких как PostGIS, могут уже быть загружены в целевую базу данных; указание этой опции предотвращает загрузку дублирующихся или устаревших данных в них.
Этот параметр действует только при восстановлении непосредственно в базу данных, а не при создании выходного SQL-скрипта.
--no-publications
Не выводить команды для восстановления публикаций, даже если они есть в архиве.
--no-security-labels
Не выводить команды для восстановления меток безопасности, даже если архив содержит их.
--no-subscriptions
Не выводить команды для восстановления подписок, даже если они есть в архиве.
--no-table-access-method
Не выводить команды для выбора методов доступа к таблицам. С этой опцией все объекты будут созданы с тем методом доступа, который является значением по умолчанию при восстановлении.
--no-tablespaces
Не выводить команды для выбора табличных пространств. С этой опцией все объекты будут созданы в табличном пространстве, который является по умолчанию во время восстановления.
--section=
sectionname
Восстановить только указанный раздел. Имя раздела может быть
pre-data
,data
илиpost-data
. Эту опцию можно указать несколько раз, чтобы выбрать несколько разделов. По умолчанию восстанавливаются все разделы.Секция данных содержит фактические данные таблицы, а также определения больших объектов. Пост-данные состоят из определений индексов, триггеров, правил и ограничений, кроме проверочных ограничений. Пред-данные состоят из всех остальных элементов определения данных.
--strict-names
Требуется, чтобы каждая схема (
-n
/--schema
) и таблица (-t
/--table
) соответствовали хотя бы одной схеме/таблице в файле резервной копии.--use-set-session-authorization
Выводите команды
SET SESSION AUTHORIZATION
вместо командALTER OWNER
для определения владения объектом. Это делает дамп более совместимым со стандартами, но в зависимости от истории объектов в дампе может не восстанавливаться должным образом.-?
--help
Показать справку о командной строке для pg_restore и выйти.
pg_restore также принимает следующие аргументы командной строки для параметров подключения:
-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_restore запросить пароль перед подключением к базе данных.
Эта опция никогда не является обязательной, так как pg_restore автоматически запросит пароль, если сервер требует аутентификацию по паролю. Однако pg_restore потратит попытку подключения, чтобы узнать, что сервер требует пароль. В некоторых случаях стоит набрать
-W
, чтобы избежать дополнительной попытки подключения.--role=
rolename
Указывает имя роли, которое будет использоваться для выполнения восстановления. Эта опция заставляет pg_restore выполнять команду
SET ROLE
rolename
после подключения к базе данных. Это полезно, когда аутентифицированный пользователь (указанный с помощью-U
) не имеет привилегий, необходимых для pg_restore, но может переключиться на роль с требуемыми правами. Некоторые установки имеют политику против прямого входа в систему в качестве суперпользователя, и использование этой опции позволяет выполнять восстановление без нарушения политики.
Окружение
PGHOST
PGOPTIONS
PGPORT
PGUSER
Параметры подключения по умолчанию
PG_COLOR
Определяет, следует ли использовать цвет в диагностических сообщениях. Возможные значения:
always
,auto
иnever
.
Эта утилита, как и большинство других утилит Tantor SE,
также использует переменные среды, поддерживаемые libpq
(см. Раздел 32.15). Однако, она не считывает
PGDATABASE
, когда имя базы данных не указано.
Диагностика
Когда указывается прямое подключение к базе данных с использованием опции -d
, pg_restore внутренне выполняет SQL-запросы. Если у вас возникли проблемы с запуском pg_restore, убедитесь, что вы можете выбирать информацию из базы данных, используя, например, psql. Кроме того, будут применяться любые настройки подключения по умолчанию и переменные среды, используемые клиентской библиотекой libpq.
Примечания
Если в вашей установке есть локальные дополнения к базе данных template1
, будьте осторожны при загрузке вывода команды pg_restore в действительно пустую базу данных; в противном случае вы можете получить ошибки из-за дублирования определений добавленных объектов. Чтобы создать пустую базу данных без каких-либо локальных дополнений, скопируйте из template0
, а не из template1
, например:
CREATE DATABASE foo WITH TEMPLATE template0;
Ограничения pg_restore подробно описаны ниже.
При восстановлении данных в существующую таблицу с использованием опции
--disable-triggers
, pg_restore генерирует команды для отключения триггеров на пользовательских таблицах перед вставкой данных, а затем генерирует команды для их повторного включения после вставки данных. Если восстановление останавливается посередине, системные каталоги могут остаться в неправильном состоянии.Восстановление больших объектов с помощью pg_restore невозможно выбирать выборочно, например, только для определенной таблицы. Если архив содержит большие объекты, то будут восстановлены все большие объекты, или ни одного, если они исключены с помощью опции
-L
,-t
или других опций.
См. также документацию по pg_dump для получения подробной информации о ограничениях pg_dump.
После восстановления рекомендуется выполнить команду ANALYZE
для каждой восстановленной таблицы, чтобы оптимизатор имел полезную статистику; см. Раздел 24.1.3 и Раздел 24.1.6 для получения дополнительной информации.
Примеры
Предположим, что мы сделали дамп базы данных с названием mydb
в файл дампа в пользовательском формате:
$
pg_dump -Fc mydb > db.dump
Чтобы удалить базу данных и создать ее заново из дампа:
$
dropdb mydb
$
pg_restore -C -d postgres db.dump
База данных, указанная в параметре -d
, может быть любой существующей базой данных в кластере; pg_restore использует ее только для выполнения команды CREATE DATABASE
для базы данных mydb
. При использовании параметра -C
данные всегда восстанавливаются в базу данных, имя которой указано в файле дампа.
Для восстановления дампа в новую базу данных с именем newdb
:
$
createdb -T template0 newdb
$
pg_restore -d newdb db.dump
Обратите внимание, что мы не используем -C
и вместо этого подключаемся напрямую к базе данных, в которую будет восстановлено. Также обратите внимание, что мы клонируем новую базу данных из template0
, а не из template1
, чтобы убедиться, что она изначально пуста.
Для переупорядочивания элементов базы данных сначала необходимо создать дамп таблицы содержимого архива:
$
pg_restore -l db.dump > db.list
Файл списка состоит из заголовка и одной строки для каждого элемента, например:
; ; Archive created at Mon Sep 14 13:55:39 2009 ; dbname: DBDEMOS ; TOC Entries: 81 ; Compression: 9 ; Dump Version: 1.10-0 ; Format: CUSTOM ; Integer: 4 bytes ; Offset: 8 bytes ; Dumped from database version: 8.3.5 ; Dumped by pg_dump version: 8.3.8 ; ; ; Selected TOC Entries: ; 3; 2615 2200 SCHEMA - public pasha 1861; 0 0 COMMENT - SCHEMA public pasha 1862; 0 0 ACL - public pasha 317; 1247 17715 TYPE public composite pasha 319; 1247 25899 DOMAIN public domain0 pasha
Точка с запятой начинает комментарий, а числа в начале строк относятся к внутреннему идентификатору архива, присвоенному каждому элементу.
Строки в файле могут быть закомментированы, удалены и переупорядочены. Например:
10; 145433 TABLE map_resolutions postgres ;2; 145344 TABLE species postgres ;4; 145359 TABLE nt_header postgres 6; 145402 TABLE species_records postgres ;8; 145416 TABLE ss_old postgres
может использоваться в качестве входных данных для pg_restore и будет восстанавливать только элементы 10 и 6, в указанном порядке:
$
pg_restore -L db.list db.dump