Как восстановить базу данных PostgreSQL из .tar файла?

20

У меня есть все резервные копии баз данных PostgreSQL во время инкрементного резервного копирования с использованием WHM, который создает $ dbName. tar- файл

Данные хранятся в этих файлах .tar, но я не знаю, как восстановить их обратно в отдельные базы данных через SSH. В частности расположение файла.

Я использовал:

pg_restore -d client03 /backup/cpbackup/daily/client03/psql/client03.tar

которая выдает ошибку "не удалось открыть входной файл: разрешение запрещено"

Любая помощь приветствуется.

Стивен
источник
Имеет ли пользователь, с которым вы запускаете эту команду, доступ к этому файлу?
Мат
Привет, Мат, ты бы так подумал (работает от имени root), но только что решил эту проблему после множества комбинаций и переместил необработанный файл .tar в tmp .... pg_restore -c -i -U postgres -d client03 -v «/tmp/client03.tar» -W В конце -W была основная хитрость, которая заставляла вводить пароль по мере необходимости, что позволяло соединять все вместе.
Стивен

Ответы:

24

Найдена правильная строка кода на случай, если кто-то еще найдет эту ветку.

pg_restore -c -i -U postgres -d client03 -v "/tmp/client03.tar" -W

Разбивка была из http://www.postgresql.org/docs/7.3/static/app-pgrestore.html и немного проб и ошибок.

По существу ...

-c to clean the database
-i to ignore any database version checks
-U to force a user
-d to select the database
-v verbose mode, don't know why
"$$" the location of the files to import in tmp to get around permission issues
-W to force asking for the password to the user (postgres)

Надеюсь, что выше помогает кому-то еще.

Стивен
источник
как сделать то же самое с tar.gz?
эри
2

Когда я использовал PgAdmin III для восстановления, он работал безупречно, используя следующую команду, которую создал сам:

pg_restore --host localhost --port 5432 --username "my_user_name" --dbname "my_db_name" --role "my_user_name" --no-password  --verbose "/Users/me/Desktop/backup_file.tar"

Обратите внимание, что во избежание предупреждений рекомендуется иметь роль владельца объектов в файле резервной копии, уже существующем на целевом сервере. Также у вас уже должна быть целевая БД, созданная и принадлежащая этой роли.

MikeM
источник
1

Я не уверен, что он может импортировать файл .tar. Я бы сделал

tar -zxvf client03.tar 

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

Стивен Томпсон
источник
1
Привет, Стивен, да, по-видимому, может, мне потребовалось некоторое время, чтобы получить правильный код и поместить файл в папку с разрешением на доступ :)
Стивен,
«-Z» вернет ошибку, так как это просто tar, не сжатый с помощью gzip.
Алекс
Алекс на 100% прав.
Стивен Томпсон
0

Ниже было сгенерировано для меня из pgAdmin iii, нажав на базу данных и щелкнув правой кнопкой мыши и выбрав восстановление. Я перешел к файлу .tar, который у меня был, и он сделал это самостоятельно.

/usr/bin/pg_restore --host localhost --port 5434 --username "postgres" \
--dbname "dvdrental" --no-password  --schema public --verbose \
"/home/npena/Desktop/dvd/dvdrental.tar"
Натан Пена
источник
0

Для версии 9.5 выполните следующее в командной строке

pg_restore -W -c -U [username] -d [database_name] -v "[path to extracted tar]"

Nnamdi
источник
0

Консоль GNU / LINUX:

pg_restore -h 127.0.0.1 -p 5432 -U "postgres" -d "dvdrental_tpl" -v "/var/backups/dvdrental.tar";

- Подробная справка

pg_restore --help

Танер Бигдатаоглу
источник