восстановление базы данных Postgres: pg_restore -vs- просто с помощью psql

16

Я сбрасываю свою базу данных Postgres с помощью pg_dump (в текстовом формате), а затем восстанавливаю ее просто с помощью psql-fопцией).

Возникает вопрос: я что-то упустил, не используя pg_restore, который выглядит как специализированный инструмент восстановления (по сравнению с универсальным psql)?

Я могу управлять такими параметрами, как отключение триггеров и тому подобное, используя pg_dumpпараметры. Для чего же тогда pg_restore? не дамп текстовых форматов?

Маркус Юний Брут
источник
4
Из руководства : « pg_restore - это утилита для восстановления базы данных PostgreSQL из архива, созданного pg_dump в одном из текстовых форматов »
a_horse_with_no_name

Ответы:

19

Если вы создали дамп в формате SQL, все, что вы можете использовать, это psql.

Если вы создали дамп custom-format ( pg_dump -Fc) или directory-format ( pg_dump -Fd), вы можете и должны его использовать pg_restore.

Пользовательские дампы и дампы в формате каталога имеют много преимуществ по сравнению с дампами простых SQL-скриптов, и я использую их исключительно. Вы можете выборочно восстанавливать только некоторые таблицы / схемы, выбирать, включать ли только схему, только данные, или и то, и другое во время восстановления и т. Д. Множество опций, которые вы должны указать приpg_dump одновременно с дампами в формате SQL, могут быть выбраны при восстановлении. время, если вы используете дамп пользовательского формата и pg_restore.

Если бы не было обратной совместимости, я уверен, что по умолчанию для pg_dumpбудет -Fc(пользовательский) формат.

Нельзя преобразовать дамп в формате SQL в пользовательский или каталог-формат, не восстановив его в базе данных PostgreSQL, а затем сбросив восстановленную БД.

Крейг Рингер
источник
Возможно ли также пакетное переименование функций и выполнение манипуляций с данными, как в файле sql с хорошим регулярным выражением?
Оформить
1
Нет, но вы можете pg_restoreбез dbnameаргумента превратить его в дамп в формате SQL, если он вам нужен. Вы не можете сделать обратное.
Крейг Рингер
@CraigRinger есть ли разница в скорости при использовании psql против pg_dump для восстановления?
Никунь Сардхара
2
@NikunjSardhara Не обычно, но pg_restoreподдерживает параллельное восстановление, и если вы используете это, это будет намного быстрее.
Крейг Рингер