Иногда при восстановлении многосхемной базы данных из файла резервной копии вы можете захотеть исключить одну или несколько схем по той или иной причине.
Например, если вы восстанавливаете огромную базу данных для целей разработки, вы не захотите восстанавливать схему, которая, как вы знаете, содержит много данных, что может привести к длительному процессу восстановления.
pg_restore утилита командной строки позволяет исключить одну или несколько схем при восстановлении базы данных из файла резервной копии, созданной pg_dump. Вы можете использовать опцию -N
или --exclude-schema
для восстановления объектов в названной схеме.
PostgreSQL поддерживает различные полезные функции резервного копирования и восстановления баз данных. В этом руководстве мы покажем, как исключить схему при восстановлении многосхемной базы данных PostgreSQL из файла резервной копии.
Исключение схемы при восстановлении базы данных PostgreSQL
Перед началом процесса восстановления, в случае, если вы выполняете его на новом сервере, убедитесь, что на сервере создан владелец или пользователь базы данных, определенный в резервной копии:
pg_restore -d myappdb -N schema_name myappdb.dump
или
pg_restore -d myappdb --exclude-schema=schema_name myappdb.dump
В приведенной выше команде флаг:
-d
– используется для указания имени целевой базы данных.-N
– указывает имя схемы, которую нужно исключить в процессе восстановления.myappdb.dump
– имя файла резервной копии базы данных. Обратите внимание, что файл должен быть в одном из форматов не обычного текста, как созданный pg_dump.
Чтобы исключить несколько схем, используйте несколько флагов -N
, как показано на рисунке.
pg_restore -d myappdb -N schema_name1 -N schema_name2 -N schema_name3 myappdb.dump
или
pg_restore -d myappdb --exclude-schema=schema_name1 --exclude-schema=schema_name2 --exclude-schema=schema_name3 myappdb.dump
Вы можете указать pg_restore создать базу данных, указанную опцией -d
, если она не существует, используя переключатель -C
или --create
, как показано ниже:
pg_restore -d myappdb -C -N schema_name myappdb.dump
или
pg_restore -d myappdb --create -N schema_name myappdb.dump
Вы должны заметить, что в случае использования ключа -C
, как в предыдущей команде, имя базы данных myappdb, указанное с помощью ключа -d
, используется только для выполнения начальных команд «DROP DATABASE myappdb» и «CREATE DATABASE myappdb», все данные восстанавливаются в имя базы данных, которое существует в файле резервной копии.
Чтобы сбросить или очистить и воссоздать целевую базу данных перед подключением к ней, используйте опцию --clean
, как показано на рисунке.
pg_restore --clean -d testdb -n schema_name myappdb.dump
По умолчанию, если в процессе восстановления возникла ошибка при выполнении команды SQL, pg_restore продолжит процесс и просто отобразит ошибки.
Вы можете позволить pg-restore завершить работу при возникновении ошибки, добавив опцию -e
или --exit-on-error
:
pg_restore -e -d testdb -n schema_name myappdb.dump
или
pg_restore --exit-on-error -d testdb -n schema_name myappdb.dump
Чтобы ускорить процесс восстановления, вы можете использовать опцию -j
или --number-of-jobs
для одновременного выполнения. Эта опция гарантирует, что такие шаги, как создание индексов, создание ограничений или загрузка данных будут выполняться параллельно, используя одновременные сессии до указанного количества заданий.
Однако, это сильно зависит от количества ядер CPU и конфигурации дисков на клиенте, сервере и сети:
pg_restore -j 4 --clean -d testdb -n schema_name myappdb.dump
или
pg_restore --number-of-jobs=4 --clean -d testdb -n schema_name myappdb.dump
Вы можете прочитать больше о pg_restore, просмотрев его man-страницу:
man pg_restore
Если у вас есть комментарии или вопросы, воспользуйтесь формой ниже.
Комментарии (0)