Как исключить схему при восстановлении базы данных PostgreSQL

Иногда при восстановлении многосхемной базы данных из файла резервной копии вы можете захотеть исключить одну или несколько схем по той или иной причине.

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

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

Если у вас есть комментарии или вопросы, воспользуйтесь формой ниже.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен www.tecmint.com

Похожие статьи

Комментарии (0)