2014-05-09 1 views
0

j'avais un programme qui fait des sauvegardes de PostgreSQL, et donne à l'utilisateur la possibilité de zipper ces sauvegardes:Existe-t-il un moyen de décompresser automatiquement avec pg_restore?

if bkp_type == 'gz': 
    command = 'pg_dumpall -U {} -h {} -p {} | gzip > {}'.format(user, server, port, file) 
elif bkp_type == 'bz2': 
    command = 'pg_dumpall -U {} -h {} -p {} | bzip2 > {}'.format(user, server, port, file) 
elif bkp_type == 'zip': 
    command = 'pg_dumpall -U {} -h {} -p {} | zip > {}'.format(user, server, port, file) 
else: 
    command = 'pg_dumpall -U {} -h {} -p {} > {}'.format(user, server, port, file) 

result = subprocess.call(command, shell=True) 

Maintenant, je me sers pg_restore pour les restaurer, mais je ne suis pas en mesure de le faire si le fichier est compressé. Y at-il un moyen de le faire directement avec pg_restore (comme dans pg_dump ou pg_dumpall) ou dois-je vérifier le type de compression utilisé et décompresser avec Python?

+0

Je vous pouvez faire un programme à la conduite d'un fichier de vidage dans un programme zip, pourquoi pas faire simplement un programme qui décompresse un fichier et l'envoie dans pg_restore? – Patrick

+0

J'ai essayé avec un exemple de fichier zip: unzip | pg_restore -U my_user -h mon_serveur -p mon_port -d chemin new_dbname, me donne l'erreur pg_restore: [archiver] le fichier d'entrée ne semble pas être une archive valide – forvas

+0

Pouvez-vous décompresser dans un fichier normal et mettre à jour votre message pour montrer le début du fichier de vidage? Vous pouvez avoir des problèmes avec les versions PG ou les formats de fichiers, difficile à dire sans aucune preuve. – Patrick

Répondre

1

Enfin j'ai réussi cette solution pour restaurer les sauvegardes générées par pg_dump (non pg_dumpall encore):

if ext == 'gz': 
    command = 'gunzip -c {} -k | pg_restore -U {} -h {} -p {}' \ 
      '-d {}'.format(file, user, server, port, new_dbname) 
elif ext == 'bz2': 
    command = 'bunzip2 -c {} -k | pg_restore -U {} -h {} -p {}' \ 
      '-d {}'.format(file, user, server, port, new_dbname) 
elif ext == 'zip': 
    command = 'unzip -p {} | pg_restore -U {} -h {} -p {} ' \ 
      '-d {}'.format(file, user, server, port, new_dbname) 
else: 
    command = 'pg_restore -U {} -h {} -p {} -d {} {}'.format(user, 
       server, port, new_dbname, file) 
Questions connexes