Como restaurar o banco de dados PostgreSQL do arquivo .tar?

20

Eu tenho todos os bancos de dados PostgreSQL armazenados em backup durante backups incrementais usando WHM, que cria um $ dbName. arquivo tar .

Os dados são armazenados nesses arquivos .tar, mas não sei como restaurá-los nos bancos de dados individuais via SSH. Em particular o local do arquivo.

Eu tenho usado:

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

que gera o erro 'não foi possível abrir o arquivo de entrada: permissão negada'

Qualquer assistência apreciada.

Stephen
fonte
O usuário com o qual você está executando este comando tem acesso a esse arquivo?
esteira
Oi Mat, você pensaria assim, (executando como root), mas acabou de resolver o problema após muitas combinações e movendo o arquivo .tar bruto para tmp .... pg_restore -c -i -U postgres -d client03 -v "/tmp/client03.tar" -W O -W no final foi o principal truque que forçou a entrada de senha conforme necessário, permitindo que tudo fosse reunido novamente.
Stephen

Respostas:

24

Encontrei a sequência de códigos correta, caso alguém encontre esse segmento.

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

A quebra ocorreu em http://www.postgresql.org/docs/7.3/static/app-pgrestore.html e um pouco de tentativa e erro.

Essencialmente...

-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)

Espero que o acima assista alguém.

Stephen
fonte
como fazer o mesmo com tar.gz?
eri
2

Ao usar o PgAdmin III para fazer a restauração para mim, ele funcionou perfeitamente usando o seguinte comando que ele próprio construiu:

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"

Nota: para evitar avisos, é uma boa ideia ter o papel de proprietário de objetos no arquivo de backup já existente no servidor de destino. Além disso, você já deve ter o banco de dados de destino criado e de propriedade dessa função.

MikeM
fonte
1

Não tenho certeza de que ele possa importar um arquivo .tar. Eu faria um

tar -zxvf client03.tar 

para extrair o que estava dentro do arquivo e tente pg_restore novamente. Eu sei que o pg_restore funciona, pois temos o mesmo método de restauração de restaurações bare-metal.

Stephen Thompson
fonte
11
Oi Stephen, sim, aparentemente, ele pode, ele só me levou um tempo para obter o código correto, e soltar o arquivo para uma pasta com permissão para ser acessado :)
Stephen
O "-z" retornaria um erro, pois é apenas um tar, não compactado com o gzip.
21410 Alex
Alex está 100% correto.
Stephen Thompson
0

Abaixo, o pgAdmin iii foi gerado para mim clicando no banco de dados e clicando com o botão direito do mouse e selecionando restaurar. Naveguei para o arquivo .tar que eu tinha e ele fez isso por conta própria.

/usr/bin/pg_restore --host localhost --port 5434 --username "postgres" \
--dbname "dvdrental" --no-password  --schema public --verbose \
"/home/npena/Desktop/dvd/dvdrental.tar"
Nathan Pena
fonte
0

Para a versão 9.5, execute o seguinte na linha de comandos

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

nnamdi
fonte
0

CONSOLE GNU / LINUX:

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

- Ajuda detalhada

pg_restore --help

Taner Bigdataoğlu
fonte