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 28/05/2021 14:17:32

Sunchaser
Membre

[Débutant] Importer uniquement un type d'objets

Bonjour,

Tout est dans le titre: est-il possible - comme avec Oracle - de faire un import en ligne de commande et de préciser que on ne veut importer qu'un seul type d'objets, comme les tables par exemple (toutes les tables, sans avoir a les citer précisemment)?

Merci!
@+

Hors ligne

#2 28/05/2021 15:14:44

dverite
Membre

Re : [Débutant] Importer uniquement un type d'objets

pg_restore n'est pas mentionné, mais on va imaginer que c'est ça. L'idée est de:

1. faire une liste de ce qu'il y a dans l'archive avec pg_restore --list
2. traiter cette liste manuellement ou automatiquement pour ne garder que ce qui est utile
3. importer le résultat avec pg_restore --use-list

Hors ligne

#3 28/05/2021 17:53:40

Sunchaser
Membre

Re : [Débutant] Importer uniquement un type d'objets

Bonjour,

Merci pour la réponse rapide.
Oui, désolé, je suis effectivement sur un pg_restore.
Au début, je pensais passer par psql, mais il semble que le type de fichiers que l'on va recevoir ( des *.backup ) ne corresponds pas, si j'ai bien compris.
Donc, on va tester cette idée de --list, je ne connais pas du tout le contenu de ce genre de fichiers et j'espère juste que on va pouvoir automatiser ce genre de tâche, car cela serait pour un import quotidien.

Un peu dommage qu'il n'y ait pas de fonctionalité native pour choisir d'importer uniquement un type d'objet...

@+

Hors ligne

#4 28/05/2021 18:38:35

dverite
Membre

Re : [Débutant] Importer uniquement un type d'objets

pg_dump peut produire 3 formats:
- plain (un script SQL): fait pour être rejoué tel quel avec psql.
- custom: a une table de contenu interne que pg_restore sait exploiter sélectivement.
- directory: le backup n'est pas un fichier mais une aborescence.

Les fichiers *.backup en question devraient en principe être produits avec le format custom pour être restaurables sélectivement.

Hors ligne

#5 28/05/2021 19:23:18

Sunchaser
Membre

Re : [Débutant] Importer uniquement un type d'objets

Merci pour les explications.
Et est-ce que pg_dump peut créer un dump qui ne contienne que des tables?
Je n'ai pas la main la dessus, j'ai l'impression que l'on va me dire de faire avec ce que j'ai mais je pourrais toujours demander a ceux qui produisent cet export, si techniquement possible.

Hors ligne

#6 29/05/2021 07:02:53

rjuju
Administrateur

Re : [Débutant] Importer uniquement un type d'objets

Non ce n'est pas possible sans avoir à nommer les objets séparéments.  Cela dit, seules les tables vont être volumineuses dans le fichier de sauvegarde et comme Daniel l'a indiqué les possibilté de filtre à la restauration (en supposant qu'il ne s'agisse pas d'un simple script sql mais une sauvegarde type custom ou directory) sont suffisante pour automatiser votre besoin. Exemple de contenu d'une table des matière (sans les commentaires) :

210; 1255 16732 FUNCTION public my_function(text) rjuju
209; 1259 18768 TABLE public t1 rjuju
3326; 0 18768 TABLE DATA public t1 rjuju
3187; 1259 18773 INDEX public t1_id_idx rjuju

Donc pour ne restaurer que les tables (DDL + contenu), il suffit de faire :

pg_restore --list fichier.backup | grep TABLE > tables_only.list
pg_restore --use-list tables_only.list -U user...

Vous pouvez également filtrer sur le DDL uniquement ou le contenu uniquement selon vos besoin.

Hors ligne

#7 29/05/2021 11:43:12

Sunchaser
Membre

Re : [Débutant] Importer uniquement un type d'objets

Bonjour rjuju,

Merci pour la confirmation, et la réponse avec un exemple wink
Cela semble plus simple que ce que j'imaginais.
Je vais essayer ça, et je reviens vous dire.

A plus tard
(et bon week-end tout le monde...)

Hors ligne

Pied de page des forums