¿Cómo restaurar la base de datos PostgreSQL del archivo .tar?

20

Tengo una copia de seguridad de todas las bases de datos PostgreSQL durante las copias de seguridad incrementales usando WHM, que crea un $ dbName. archivo tar .

Los datos se almacenan en estos archivos .tar, pero no sé cómo restaurarlos nuevamente en las bases de datos individuales a través de SSH. En particular la ubicación del archivo.

He estado usando:

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

que genera el error 'no se pudo abrir el archivo de entrada: permiso denegado'

Cualquier ayuda apreciada.

Stephen
fuente
¿El usuario con el que está ejecutando este comando tiene acceso a ese archivo?
mat
Hola Mat, pensarías que sí (ejecutándose como root), pero acabo de resolver el problema después de muchas combinaciones y moví el archivo .tar sin procesar a tmp ... pg_restore -c -i -U postgres -d client03 -v "/tmp/client03.tar" -W El -W al final fue el truco principal que forzó la entrada de la contraseña según lo requerido, lo que permitió que todo se volviera a armar.
Stephen

Respuestas:

24

Encontró la cadena de código correcta, en caso de que alguien más encuentre este hilo.

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

El desglose fue de http://www.postgresql.org/docs/7.3/static/app-pgrestore.html y un poco de prueba y error.

Esencialmente...

-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 lo anterior ayude a alguien más.

Stephen
fuente
¿Cómo hacer lo mismo con tar.gz?
eri
2

Cuando utilicé PgAdmin III para hacer la restauración por mí, funcionó a la perfección utilizando el siguiente comando que creó:

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"

Tenga en cuenta que para evitar advertencias es una buena idea tener el rol de propietario de los objetos en el archivo de copia de seguridad que ya existe en el servidor de destino. Además, ya debe tener la base de datos de destino creada y propiedad de ese rol.

MikeM
fuente
1

No estoy seguro de que pueda importar un archivo .tar. Yo haría un

tar -zxvf client03.tar 

para extraer lo que haya dentro del archivo e intente nuevamente pg_restore. Sé que pg_restore funciona, ya que tenemos el mismo método de restauración de las restauraciones de metal desnudo.

Stephen Thompson
fuente
1
Hola Stephen, sí, aparentemente puede, solo me tomó un tiempo obtener el código correcto y colocar el archivo en una carpeta con permiso para acceder :)
Stephen
El "-z" devolvería un error, ya que es solo un alquitrán, no comprimido con gzip.
Alex
Alex es 100% correcto.
Stephen Thompson
0

A continuación se generó para mí desde pgAdmin iii haciendo clic en la base de datos y haciendo clic derecho y seleccionando restaurar. Navegué hasta el archivo .tar que tenía y lo hizo solo.

/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
fuente
0

Para la versión 9.5, ejecute lo siguiente en la línea de comando

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

nnamdi
fuente
0

CONSOLA GNU / LINUX:

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

- Ayuda detallada

pg_restore --help

Taner Bigdataoğlu
fuente