PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 15/12/2015 10:14:48

Doctor Who
Membre

Restaurer une seule table à partir d'un fichier volumineux

Bonjour,

Je suis face à un petit blocage, en effet, chaque soir mon serveur de base de données fait un dump sous la forme d'un fichier .backup
Les rares fois où j'ai du restaurer, je shootais la bdd complète et restaurais le fichier intégralement via psql.

Seul problème cette fois, des tables ont été mise à jour et il faudrait que je ne restaure qu'une seule table. Le hic c'est que la syntaxe que j'ai trouvé ne fonctionne pas :
pg_restore --data-only --table=tablename fulldump.pg > onetable.pg

Des idées ? Mon backup fait plus de 50 Go, je n'ai pas moyen de l'ouvrir pour récupérer les lignes SQL correspondantes.

@+

Hors ligne

#2 15/12/2015 10:45:06

ruizsebastien
Membre

Re : Restaurer une seule table à partir d'un fichier volumineux

Bonjour,

Voilà comment je fais :
1ère étape :
pg_restore -l mon_fichier.backup | awk "/ma_table/" > /tmp/mon_fichier.txt
2ème étape :
pg_restore -d ma_base -v -U mon_user_cible -h mon_serveur --data-only -p mon_port --use-list=/tmp/mon_fichier.txt mon_fichier.backup

Cordialement.


Cordialement,

Sébastien.

Hors ligne

#3 15/12/2015 10:46:53

arthurr
Membre

Re : Restaurer une seule table à partir d'un fichier volumineux

Bonjour,

Quelle commande utilisez pour pour faire le backup ?
pour pouvoir ne restaurer qu'une table (ou un autre objet), il faut un backup au format "custom" => option -Fc
Si vous avez un backup qui se restaure avec psql, vous ne devez pas avoir le format custom, il ne vous reste plus qu'a editer le backup pour ne sortir que les infos que vous voulez. mais sur un fichier de 50go ...

Dernière modification par arthurr (15/12/2015 10:48:06)

Hors ligne

#4 15/12/2015 12:32:25

Doctor Who
Membre

Re : Restaurer une seule table à partir d'un fichier volumineux

Bonjour à vous,

Merci pour vos réponses et votre aide.
Effectivement, Pg_Restore ne fonctionne pas, le terminal me dit que c'est du SQL et qu'il faut passer par psql...

En attendant, j'ai recréé une base PostGIS vide dans laquelle je vais réinjecter le backup complet : psql bddvierge < masauvegarde.backup

Je vois avec mon prestataire informatique où sont stockés les scripts de sauvegarde sur le serveur et je reviens vers vous pour améliorer la syntaxe pour que ce soit plus confortable à la prochaine boulette smile

@+

Hors ligne

#5 15/12/2015 12:57:34

Doctor Who
Membre

Re : Restaurer une seule table à partir d'un fichier volumineux

Re,

Alors j'ai pu remettre la main sur les scripts et ils sont sont configuré ainsi :

pg_dump -U postgres -h localhost base1 > /data/backup/postgres/base1.backup
pg_dump -U postgres -h localhost base2 > /data/backup/postgres/base2.backup
pg_dump -U postgres -h localhost base3 > /data/backup/postgres/base3.backup
pg_dumpall -U postgres -h localhost --globals-only > /data/backup/postgres/users.backup

Comment faudrait il arranger cela pour que je puisse utiliser pgrestore et pouvoir ne restaurer qu'une partie de base ?

Hors ligne

#6 15/12/2015 13:15:30

ruizsebastien
Membre

Re : Restaurer une seule table à partir d'un fichier volumineux

comme disait arthurr plus haut :
il faut un backup au format "custom" => option -Fc

voir la doc :
http://docs.postgresql.fr/9.4/app-pgdump.html

Cordialement.


Cordialement,

Sébastien.

Hors ligne

#7 15/12/2015 14:51:08

Doctor Who
Membre

Re : Restaurer une seule table à partir d'un fichier volumineux

Ok merci, je vais tester cela

Hors ligne

#8 16/12/2015 10:12:08

gleu
Administrateur

Re : Restaurer une seule table à partir d'un fichier volumineux

Pas forcément custom. Tous les formats binaires sont possibles : tar, custom et directory. Le format custom est mon format préféré, mais ça, c'est une affaire de goût smile


Guillaume.

Hors ligne

#9 16/12/2015 10:26:42

Doctor Who
Membre

Re : Restaurer une seule table à partir d'un fichier volumineux

Je viens de faire le test cette nuit ça fonctionne très bien avec la syntaxe :
pg_dump -U postgres -h localhost -Fc -b mabase > /data/backup/postgres/mabase.backup
...que ce soit une restauration complète ou partielle testée et approuvée !

Cerise sur le gâteau, pour ma base de 63 Go, au lieu d'avoir un fichier SQL de 55 Go, celui-ci ne fait que 10 Go.

Merci beaucoup pour votre aide, très bonnes fêtes de fin d'année à toute la communauté smile

Dernière modification par Doctor Who (16/12/2015 10:27:00)

Hors ligne

#10 16/12/2015 10:36:36

gleu
Administrateur

Re : Restaurer une seule table à partir d'un fichier volumineux

Juste une petite info en passant, l'option -b dans ce cas ne sert à rien.


Guillaume.

Hors ligne

#11 16/12/2015 10:41:14

Doctor Who
Membre

Re : Restaurer une seule table à partir d'un fichier volumineux

gleu a écrit :

Juste une petite info en passant, l'option -b dans ce cas ne sert à rien.

Dans la doc, je comprenais que ça prenais en compte des objets longs qui ne serait pas pris en charge autrement. C'est donc inutile même dans le cas d'une base de données spatiales avec des champs géométriques assez longs ?

Hors ligne

#12 16/12/2015 12:09:34

gleu
Administrateur

Re : Restaurer une seule table à partir d'un fichier volumineux

Les Large Objects sont des objets binaires stockées dans la table pg_largeobjects. Ce type d'objet est pris en compte par défaut. Par contre, si vous utilisez les options -t ou -n pour ne sauvegarder qu'une table ou qu'un schéma, vous excluez de ce fait la table pg_largeobjects. Et du coup, l'option -b permet de dire à pg_dump de sauvegarder en plus cette table. Mais si vous n'utilisez pas -t ou -n, -b ne sert à rien vu que c'est déjà le cas par défaut.


Guillaume.

Hors ligne

#13 16/12/2015 12:18:31

Doctor Who
Membre

Re : Restaurer une seule table à partir d'un fichier volumineux

Ok merci pour l'explication. Je vais l'enlever et refaire des tests de restauration demain.

Hors ligne

Pied de page des forums