Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 10/07/2018 11:03:59
- jeanphi45
- Membre
[PostgreSQL 9.6.9] dump d'une table
Bonjour ,
Voici ce que je dois faire et qui ne fonctionne plus : dump d'une table puis restauration dans une autre BD en changeant le schema
Avant je fais le dump : pg_dump --host monserveur --port monport --username postgres --format plain --no-owner --no-privileges --verbose --table schema1.matable
puis pipe sed 's/search_path = schema1/search_path = schema2/'
Mais le dump a changé au nouveau du search path (SELECT pg_catalog.set_config('search_path', '', false)
et le cherche remplace ne fonctionne plus
D'où une première question : y a-t-il moyen de revenir à un dump avec search path et où la table est indiquée sans son schéma ?
Et sinon il y a peut-être plus simple dorénavant par rapport au besoin initial
Hors ligne
#2 10/07/2018 11:22:27
- gleu
- Administrateur
Re : [PostgreSQL 9.6.9] dump d'une table
Non, il n'est pas possible de revenir au comportement initial de pg_dump. La modification réalisée en 9.6.8 a pour but de combler une faille de sécurité. Du coup, il n'y a pas d'options pour la rétablir
Il faut donc changer votre sed pour transformer le "CREATE TABLE schema1.matable" en "CREATE TABLE schema2.matable".
Guillaume.
Hors ligne
#3 10/07/2018 11:33:00
- jeanphi45
- Membre
Re : [PostgreSQL 9.6.9] dump d'une table
En fait le schema apparaît à d'autres endroits dans le dump. Pas simple
Hors ligne
#4 10/07/2018 11:34:54
- jeanphi45
- Membre
Re : [PostgreSQL 9.6.9] dump d'une table
Je remplacerais bien schema1.matable par schema2.matable mais je ne sais pas si cela suffit.
Dernière modification par jeanphi45 (10/07/2018 11:35:08)
Hors ligne
#5 10/07/2018 11:57:39
- ruizsebastien
- Membre
Re : [PostgreSQL 9.6.9] dump d'une table
bonjour,
Chez nous on fait du sed pour remplacer le nom du schéma, mais d'expérience c'est très couteux sur de gros dump en temps et en espace disque (sed produit un 2ème fichier de la même taille que le dump le temps de la transformation).
Du coup si quelqu'un à une meilleur idée, je suis preneur.
Cordialement,
Sébastien.
Hors ligne
#6 10/07/2018 11:58:16
- jeanphi45
- Membre
Re : [PostgreSQL 9.6.9] dump d'une table
ça a l'air de fonctionner :
sed 's/schema1.matable/schema2.matable/g'
(ne pas oublier le /g si l'occurence apparait plusieurs fois sur une même ligne)
Dernière modification par jeanphi45 (10/07/2018 11:59:20)
Hors ligne
#7 10/07/2018 13:14:09
- gleu
- Administrateur
Re : [PostgreSQL 9.6.9] dump d'une table
C'est coûteux et dangereux mais il n'y a pas d'autres solutions à ma connaissance.
Guillaume.
Hors ligne
#8 10/07/2018 13:15:04
- dverite
- Membre
Re : [PostgreSQL 9.6.9] dump d'une table
il faudrait exporter et importer séparément la structure et les données, pour éviter de passer la recherche/remplacement sur les données, qui est coûteuse mais aussi dangereuse (si le contenu recherché s'avère être présent dans les données par coïncidence).
Voir les options de pg_dump --schema-only et --data-only
@DanielVerite
http://blog-postgresql.verite.pro/
Hors ligne
#9 10/07/2018 13:21:34
- gleu
- Administrateur
Re : [PostgreSQL 9.6.9] dump d'une table
Le seul moyen réellement sûr de le faire serait de modifier pg_restore pour qu'il prenne en compte cette fonctionnalité. Même pas dit qu'une fonctionnalité de ce genre serait acceptée.
Guillaume.
Hors ligne
#10 10/07/2018 14:14:09
- jeanphi45
- Membre
Re : [PostgreSQL 9.6.9] dump d'une table
C'est coûteux et dangereux mais il n'y a pas d'autres solutions à ma connaissance.
Attention notamment aux noms de table entre guillemets. exemple data."analyse" , ce sed ne fonctionne pas
Hors ligne
#11 10/07/2018 14:17:09
- ruizsebastien
- Membre
Re : [PostgreSQL 9.6.9] dump d'une table
il faudrait exporter et importer séparément la structure et les données, pour éviter de passer la recherche/remplacement sur les données, qui est coûteuse mais aussi dangereuse (si le contenu recherché s'avère être présent dans les données par coïncidence).
Voir les options de pg_dump --schema-only et --data-only
oui sauf que depuis les mises à jours mineures récentes, le nom du schéma se retrouve dans les ordres copy (ou insert) du dump --data-only.
Donc pas d'autres choix que de parser les données aussi... (effectivement très dangereux pour les données)
Le seul moyen réellement sûr de le faire serait de modifier pg_restore pour qu'il prenne en compte cette fonctionnalité. Même pas dit qu'une fonctionnalité de ce genre serait acceptée.
Dommage... dans les entreprises c'est un besoin quotidien : rafraîchir une base de dev via une base de prod.
Cordialement,
Sébastien.
Hors ligne
#12 10/07/2018 14:27:15
- gleu
- Administrateur
Re : [PostgreSQL 9.6.9] dump d'une table
Dans ce cas, tu crées une nouvelle base dans ton instance de dév. Je ne vois pas ce que le schéma vient faire là-dedans.
Guillaume.
Hors ligne
#13 10/07/2018 14:47:36
- ruizsebastien
- Membre
Re : [PostgreSQL 9.6.9] dump d'une table
Dans ce cas, tu crées une nouvelle base dans ton instance de dév. Je ne vois pas ce que le schéma vient faire là-dedans.
dans certaines entreprise, dont la mienne, il y a des normes dans les noms de bases et de schémas. Et donc on ne nomme jamais un schéma de prod de la même manière qu'un schéma de dev.
Cordialement,
Sébastien.
Hors ligne
#14 10/07/2018 15:07:58
- gleu
- Administrateur
Re : [PostgreSQL 9.6.9] dump d'une table
Toujours possible de le renommer après restauration complète. Il y a certainement un truc qui rend la chose pas facile, mais j'avoue que je ne vois pas quoi
Guillaume.
Hors ligne
Pages : 1