Как postgres
пользователь, я выполнил команду pg_restore:
pg_restore -C backup.curated.20190901.0.bup
т.е. создать базу данных в соответствии с тем, что находится в файле дампа.
Кажется, это работает нормально, он высветил кучу команд sql на экране.
Но ... база данных не создана.
Чтобы действительно создать его, мне пришлось изменить команду, чтобы добавить -d
указать базу данных.
pg_restore -d postgres -C backup.curated.20190901.0.bup
Такое же поведение, за исключением того, что на этот раз база данных восстановлена.
-C --создать
Create the database before restoring into it. If --clean is also specified, drop and recreate the target database before connecting to it.
When this option is used, the database named with -d is used only to issue the initial DROP DATABASE and CREATE DATABASE commands. All data is restored into the database name that appears in the archive.
В принципе, мне любопытно, почему отсутствие -d
Switch не жалуется, если это необходимо для восстановления БД.
Что это pg_restore
делать здесь? Предварительный просмотр пробного прогона?
Если это актуально, я использовал команду дампа:
sudo -u postgres $pgbin/pg_dump -o -Fc $dbname > $dirbackup/$dbname.bup;
В принципе, мне любопытно, почему не жалуются на отсутствие ключа -d, если это необходимо для восстановления базы данных.
Что здесь делает pg_restore? Предварительный просмотр пробного прогона?
Он выводит сценарий, не предполагая, что вы хотите с ним делать. Предварительный просмотр, конечно, но также и подключение к psql
, или в ssh
чтобы воспроизвести его на удаленном экземпляре, к которому вы не можете напрямую подключиться, или просто сохраните его в файл, чтобы отредактировать или перенести в другое место.
В последней версии PostgreSQL (12.0, выпущенной 3 октября 2019 г.) было подсчитано, что слишком много людей были удивлены, как и вы: pg_restore
иду на стандартный вывод по умолчанию, поэтому, начиная с этого выпуска, нам нужно указать -f -
аргумент, чтобы получить такое поведение. Первый вызов, о котором вы упомянули, не работает:
pg_restore: error: one of -d/--dbname and -f/--file must be specified
Флаги, необходимые с pg_restore
зависят от обоих:
gd_dump
pg_dumpall
и последняя причина pg_restore -C
не требует обязательного (разового) -d <database name>
зависимости, файл резервной копии может содержать резервные копии более чем одной базы данных, и в этом случае имена этих баз данных будут включены в файл резервной копии.