pg_restore
Восстанавливает базу данных из файла архива, созданного командой pg_dump.
Синтаксис
pg_restore [<connection-option> ...] [<restore_option> ...] [<filename>]
pg_restore -? | --help
pg_restore -V | --version
Описание
pg_restore — утилита для восстановления базы данных из архива, созданного pg_dump в одном из нетекстовых форматов.
Она выполняет команды, необходимые для восстановления базы данных в состояние на момент ее сохранения.
Архивные файлы также позволяют pg_restore выборочно восстанавливать объекты или изменять порядок их восстановления.
pg_restore может работать в двух режимах.
Если указано имя базы данных, архив восстанавливается непосредственно в базу данных.
В противном случае создается скрипт, содержащий SQL-команды для восстановления базы данных, который записывается в файл или направляется в стандартный вывод.
Такой вывод эквивалентен формату обычного текста pg_dump.
Поэтому некоторые параметры, управляющие выводом, аналогичны параметрам pg_dump.
pg_restore не может восстановить информацию, которой нет в архивном файле.
Например, если архив создан с использованием параметра "выгрузить данные в виде команд INSERT" (--inserts), pg_restore не сможет загрузить данные с помощью операторов COPY.
Параметры
- <filename>
-
Указывает расположение архивного файла (или каталога для архива в формате каталога) для восстановления. Если параметр не указан, используется стандартный ввод.
Параметры восстановления
- -a | --data-only
-
Восстанавливает только данные без схемы (определений объектов). Восстанавливаются данные таблиц и значения последовательностей, если они присутствуют в архиве.
Этот параметр аналогичен указанию
--section=data, но по историческим причинам не полностью эквивалентен ему. - -c | --clean
-
Очищает (удаляет) объекты базы данных перед их созданием. Это может привести к появлению безвредных сообщений об ошибках, если каких-либо объектов не было в целевой базе данных.
- -C | --create
-
Создает базу данных перед восстановлением в нее. Если также указан параметр
--clean, целевая база данных удаляется и создается заново перед подключением к ней.При использовании этого параметра база данных, указанная с помощью параметра
-d, используется только для выполнения начальных командDROP DATABASEиCREATE DATABASE. Все данные восстанавливаются в базу данных с именем, которое указано в архиве. - -d <dbname> | --dbname=<dbname>
-
Подключается к указанной базе данных и восстанавливает данные непосредственно в нее. Эта утилита, как и большинство других утилит Greengage DB, также использует переменные окружения, поддерживаемые
libpq. Однако утилита не читаетPGDATABASE, если имя базы данных не указано. - -e | --exit-on-error
-
Завершает работу при возникновении ошибки во время отправки SQL-команд в базу данных. По умолчанию утилита продолжает работу и выводит количество ошибок в конце процесса восстановления.
- -f <outfilename> | --file=<outfilename>
-
Указывает выходной файл для генерируемого скрипта или для списка при использовании с параметром
-l. По умолчанию используется стандартный вывод. - -F c|d|t | --format={custom | directory | tar}
-
Формат архива, созданного
pg_dump. Указывать формат необязательно, так какpg_restoreопределит его автоматически. Формат может бытьcustom,directoryилиtar. - -I <index> | --index=<index>
-
Восстанавливает только определение указанного индекса.
- -j <number-of-jobs> | --jobs=<number-of-jobs>
-
Выполняет наиболее длительные части
pg_restore— те, которые загружают данные, создают индексы или создают ограничения — в нескольких параллельных заданиях. Этот параметр может значительно сократить время восстановления большой базы данных на сервере с многопроцессорной архитектурой.Каждое задание представляет собой один процесс или один поток, в зависимости от операционной системы, и использует отдельное подключение к серверу.
Оптимальное значение для этого параметра зависит от аппаратной конфигурации сервера, клиента и сети. Факторы включают количество ядер процессора и конфигурацию дисковой подсистемы. Хорошей отправной точкой является количество ядер процессора на сервере, но в некоторых случаях большие значения также могут привести к ускорению восстановления. Слишком высокие значения приведут к снижению производительности из-за избыточной нагрузки.
С этим параметром поддерживается только специальный архивный формат. Входной файл должен быть обычным файлом (а не, например, конвейером). Этот параметр игнорируется при генерации скрипта вместо прямого подключения к серверу базы данных. Кроме того, несколько заданий нельзя использовать вместе с параметром
--single-transaction. - -l | --list
-
Выводит список содержимого архива. Вывод этой операции можно использовать с параметром
-Lдля ограничения и изменения порядка восстанавливаемых объектов. - -L <list-file> | --use-list=<list-file>
-
Восстанавливает только элементы из
list-fileв порядке их появления в файле. Обратите внимание, что если вместе с-Lиспользуются параметры фильтрации, такие как-nили-t, они дополнительно ограничат восстанавливаемые объекты.list-fileобычно создается путем редактирования вывода предыдущей операции-l. Строки можно перемещать или удалять, а также комментировать, помещая точку с запятой (;) в начале строки. См. примеры ниже. - -n <schema> | --schema=<schema>
-
Восстанавливает только объекты из указанной схемы. Можно комбинировать с параметром
-tдля восстановления только конкретной таблицы. - -O | --no-owner
-
Не выводит команды для установки владельца объектов в соответствии с исходной базой данных. По умолчанию
pg_restoreвыполняет командыALTER OWNERилиSET SESSION AUTHORIZATIONдля установки владельца созданных элементов схемы. Эти команды завершатся ошибкой, если начальное подключение к базе данных не выполнено суперпользователем (или пользователем, владеющим всеми объектами в скрипте). При использовании-Oдля начального подключения можно использовать любое имя пользователя, и этот пользователь станет владельцем всех созданных объектов. - -P '<function-name>(<argtype> [, …])' | --function='<function-name>(<argtype> [, …])'
-
Восстанавливает только указанную функцию. Имя функции должно быть заключено в кавычки. Убедитесь, что имя функции и аргументы указаны точно так же, как они указаны в оглавлении файла выгрузки (как показывает параметр
--list). - -s | --schema-only
-
Восстанавливает только определения объектов схемы, без восстановления данных, если такие определения присутствуют в архиве.
Этот параметр противоположен
--data-only. Он похож на указание--section=pre-data --section=post-data, но по историческим причинам не идентичен ему.Не путать с параметром
--schema, который использует "схема" в другом значении. - -S <username> | --superuser=<username>
-
Указывает имя суперпользователя для использования при деактивации триггеров. Актуально только при использовании
--disable-triggers.ПРИМЕЧАНИЕGreengage DB не поддерживает пользовательские триггеры.
- -t <table> | --table=<table>
-
Восстанавливает только определение и/или данные указанной таблицы. Можно указать несколько таблиц, используя несколько параметров
-t. Можно комбинировать с параметром-nдля указания схемы. - -T <trigger> | --trigger=<trigger>
-
Восстанавливает только указанный триггер.
ПРИМЕЧАНИЕGreengage DB не поддерживает пользовательские триггеры.
- -v | --verbose
-
Включает подробный вывод.
- -V | --version
-
Выводит версию
pg_restoreи завершает работу. - -x | --no-privileges | --no-acl
-
Не восстанавливает привилегии доступа (команды
GRANT/REVOKE). - -1 | --single-transaction
-
Выполняет восстановление как одну транзакцию. Это гарантирует, что либо все команды будут успешно выполнены, либо никакие изменения не будут применены.
- --disable-triggers
-
Этот параметр актуален только при восстановлении только данных. Он указывает
pg_restoreвыполнить команды для временной деактивации триггеров в целевых таблицах во время перезагрузки данных. Используйте этот параметр, если в таблицах есть триггеры, которые не должны срабатывать во время загрузки данных. Команды для--disable-triggersдолжны выполняться от имени суперпользователя. Поэтому следует также указать имя суперпользователя с-Sили, что предпочтительнее, запуститьpg_restoreот имени суперпользователя.ПРИМЕЧАНИЕGreengage DB не поддерживает пользовательские триггеры.
- --if-exists
-
Добавляет выражение
IF EXISTSк командам удаления объектов базы данных. Применяется только вместе с параметром--clean. - --no-data-for-failed-tables
-
По умолчанию данные таблицы восстанавливаются, даже если команда создания таблицы завершилась ошибкой (например, потому что она уже существует). С этим параметром данные для такой таблицы пропускаются. Это поведение полезно, если в целевой таблице уже содержатся нужные данные. Указание этого параметра предотвращает загрузку дублирующихся или устаревших данных. Этот параметр эффективен только при восстановлении непосредственно в базу данных, а не при генерации SQL-скрипта.
- --no-security-labels
-
Не выводит команды для восстановления меток безопасности, даже если архив содержит их.
- --no-tablespaces
-
Не выводит команды для выбора табличных пространств. С этим параметром все объекты будут созданы в том табличном пространстве, которое используется по умолчанию во время восстановления.
- --section=<sectionname>
-
Восстанавливает только указанную секцию. Имя секции может быть
pre-data,dataилиpost-data. Этот параметр можно указать несколько раз для выбора нескольких секций.По умолчанию восстанавливаются все секции.
- --use-set-session-authorization
-
Выводит команды SQL-стандарта
SET SESSION AUTHORIZATIONвместо командALTER OWNERдля определения владельца объектов. Это делает выгрузку более совместимой со стандартами, но в зависимости от истории объектов в выгрузке она может быть восстановлена некорректно. - -? | --help
-
Отображает справку по аргументам командной строки
pg_restoreи завершает работу.
Параметры подключения
- -h <host> | --host=<host>
-
Имя хоста, на котором работает мастер Greengage DB. Если параметр не указан, читается из переменной окружения
PGHOST; по умолчанию используетсяlocalhost. - -p <port> | --port=<port>
-
TCP-порт, на котором мастер Greengage DB прослушивает подключения. Если параметр не указан, читается из переменной окружения
PGPORT; по умолчанию используется порт5432. - -U <username> | --username=<username>
-
Имя роли базы данных для подключения. Если параметр не указан, читается из переменной окружения
PGUSER; по умолчанию используется имя текущей системной роли. - -w | --no-password
-
Никогда не запрашивает пароль. Если сервер требует аутентификацию по паролю, а пароль недоступен другими способами (например, через файл .pgpass), попытка подключения завершится неудачей. Этот параметр удобен для пакетных заданий и скриптов, где нет пользователя для ввода пароля.
- -W | --password
-
Принудительно запрашивает пароль.
- --role=<rolename>
-
Указывает роль, которая будет использоваться для выполнения восстановления. После подключения к базе данных
pg_restoreвыполнит командуSET ROLE rolename. Это полезно, когда аутентифицированному пользователю (через-U) не хватает прав, необходимыхpg_restore, но он может переключиться на роль с нужными привилегиями. Некоторые инсталляции ограничивают прямой вход от имени суперпользователя; использование этого параметра позволяет выполнять восстановление, соблюдая политику безопасности.
Примечания
Если в вашей инсталляции есть локальные дополнения к базе данных template1, будьте осторожны при загрузке вывода pg_restore в действительно пустую базу данных; в противном случае вы, вероятно, получите ошибки из-за дублирующихся определений добавленных объектов.
Чтобы создать пустую базу данных без каких-либо локальных дополнений, копируйте из template0, а не из template1, например:
CREATE DATABASE foo WITH TEMPLATE template0;
При восстановлении данных в уже существующую таблицу с использованием параметра --disable-triggers pg_restore генерирует команды для деактивации триггеров в пользовательских таблицах перед вставкой данных, а затем генерирует команды для их повторной активации после вставки данных.
При прерывании восстановления системные каталоги могут остаться в несогласованном состоянии.
См. также документацию pg_dump для получения подробной информации об ограничениях pg_dump.
После восстановления рекомендуется выполнить команду ANALYZE для каждой восстановленной таблицы с целью обновления статистики для планировщика запросов.
Примеры
Предположим, что база данных с именем mydb выгружена в файл специального формата:
$ pg_dump -Fc mydb > db.dump
Чтобы удалить базу данных и создать ее заново из выгрузки, выполните:
$ dropdb mydb
$ pg_restore -C -d template1 db.dump
Приведенные ниже команды загружают выгрузку в новую базу данных с именем newdb.
Обратите внимание, что параметр -C не указан, поэтому подключение выполняется напрямую к базе данных, в которую будет производиться восстановление.
Также обратите внимание, что новая база данных создается на основе template0, а не template1, чтобы она была изначально пустой:
$ createdb -T template0 newdb
$ pg_restore -d newdb db.dump
Чтобы изменить порядок элементов базы данных, сначала необходимо выгрузить оглавление архива:
$ pg_restore -l db.dump > db.list
Файл списка состоит из заголовка и одной строки для каждого элемента, например:
; Archive created at Mon Dec 22 13:46:32 2025 ; dbname: mydb ; TOC Entries: 9 ; Compression: -1 ; Dump Version: 1.13-0 ; Format: CUSTOM ; Integer: 4 bytes ; Offset: 8 bytes ; Dumped from database version: 9.4.26 ; Dumped by pg_dump version: 9.4.26 ; ; ; Selected TOC Entries: ; 2433; 1262 16384 DATABASE - mydb 10 6; 2615 2200 SCHEMA - public gpadmin 2434; 0 0 COMMENT - SCHEMA public gpadmin 2435; 0 0 ACL - SCHEMA public gpadmin 1; 3079 12331 EXTENSION - plpgsql 2436; 0 0 COMMENT - EXTENSION plpgsql
Точки с запятой начинают комментарий, а числа в начале строк обозначают внутренний идентификатор архива, присвоенный каждому элементу. Строки в файле можно комментировать, удалять и переупорядочивать. Например:
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