Comment restaurer la base de données PostgreSQL à partir du fichier .tar?

20

J'ai toutes les bases de données PostgreSQL sauvegardées pendant les sauvegardes incrémentielles à l'aide de WHM, ce qui crée un $ dbName. fichier tar .

Les données sont stockées dans ces fichiers .tar, mais je ne sais pas comment les restaurer dans les bases de données individuelles via SSH. En particulier l'emplacement du fichier.

J'utilise:

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

qui génère l'erreur «impossible d'ouvrir le fichier d'entrée: autorisation refusée»

Toute aide appréciée.

Stephen
la source
L'utilisateur avec lequel vous exécutez cette commande a-t-il accès à ce fichier?
mat
Salut Mat, vous le pensez (en tant que root) mais venez de résoudre le problème après de nombreuses combinaisons, et en déplaçant le fichier .tar brut vers tmp .... pg_restore -c -i -U postgres -d client03 -v "/tmp/client03.tar" -W Le -W à la fin était l'astuce principale qui a forcé la saisie du mot de passe comme requis, ce qui a permis de tout remettre en place.
Stephen

Réponses:

24

Trouvé la chaîne de code correcte, au cas où quelqu'un d'autre trouverait ce fil.

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

La panne était de http://www.postgresql.org/docs/7.3/static/app-pgrestore.html et un peu d'essais et d'erreurs.

Essentiellement...

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

J'espère que ce qui précède aide quelqu'un d'autre.

Stephen
la source
comment faire de même avec tar.gz?
eri
2

Lors de l'utilisation de PgAdmin III pour effectuer la restauration pour moi, il a fonctionné parfaitement en utilisant la commande suivante qu'il a construite lui-même:

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"

Remarque pour éviter les avertissements, c'est une bonne idée d'avoir le rôle du propriétaire des objets dans le fichier de sauvegarde déjà existant sur le serveur cible. De plus, vous devriez déjà avoir la base de données cible créée et détenue par ce rôle.

MikeM
la source
1

Je ne suis pas certain qu'il puisse importer un fichier .tar. Je ferais un

tar -zxvf client03.tar 

pour extraire tout ce qui se trouvait dans le fichier et réessayer pg_restore. Je sais que pg_restore fonctionne, car nous avons la même méthode de restauration à partir de restaurations nues.

Stephen Thompson
la source
1
Salut Stephen, oui apparemment c'est possible, il m'a juste fallu un certain temps pour obtenir le bon code et déposer le fichier dans un dossier avec la permission d'y accéder :)
Stephen
Le "-z" retournerait une erreur, car c'est juste un tar, non compressé avec gzip.
Alex
Alex a 100% raison.
Stephen Thompson
0

Ci-dessous a été généré pour moi à partir de pgAdmin iii en cliquant sur la base de données et en cliquant avec le bouton droit et en sélectionnant restaurer. J'ai accédé au fichier .tar que j'avais et il l'a fait tout seul.

/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
la source
0

Pour la version 9.5, exécutez ce qui suit en ligne de commande

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

nnamdi
la source
0

CONSOLE GNU / LINUX:

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

- Aide détaillée

pg_restore --help

Taner Bigdataoğlu
la source