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

#1 27/01/2014 16:06:00

devjava83
Membre

Administration d un base: dump, restore et inject de données

Bonjour,

Dans le cadre d un projet utilisant une base de donnees PostgresSQL je dois creer un petit utilitaire permettant de faire:
- un dump des donnees (certaines tables)
- un restaure à partir du fichier dump (.backup)
- un injecte des donnés à partir du fichier dump (.backup)

Pour le dump et restore je n arrive pas a selectionner les tables qui m interressent et voici ce que j ai pour le moment (dump complet)
l option --table table1 table2 ... ne fonctionne pas

dump:
pg_dump --host=$HOST --username="$USERNAME" --role="$ROLE" --format=custom --blobs --section=data $VERBOSE --file="$FILE" $DATABASE

restore:
pg_restore --host $HOST --username "$USERNAME" --dbname "$DATABASE" --role "$ROLE" $VERBOSE "$FILE


pour l'inject je ne sais pas si il existe une méthode simple et generique pour injecter un jeux de données dans une base.


Y a t il des experts en base donnees qui auraient un script tout fait ;-) ou qui pourrait m aider ?


Merci d avance pour votre aide.

Hors ligne

#2 27/01/2014 16:15:53

Bidou
Membre

Re : Administration d un base: dump, restore et inject de données

Bonjour,


Pour le dump de vos tables, essayez ça :  pg_dump -t "schema.table1" -t "schema.table2"

Hors ligne

#3 27/01/2014 16:30:40

devjava83
Membre

Re : Administration d un base: dump, restore et inject de données

Bonjour,

je n avais pas compris le fonctionnement de l option -t: -t table1 table2 ...
ca a l air de fonctionner, merci pour ton aide.
me reste l injection des donnees, as tu une idee ?

D avance merci

Hors ligne

#4 28/01/2014 00:18:04

gleu
Administrateur

Re : Administration d un base: dump, restore et inject de données

Bin, pareil, option -t. Voir http://docs.postgresql.fr/9.3/app-pgrestore.html pour les détails.


Guillaume.

Hors ligne

#5 28/01/2014 10:54:30

devjava83
Membre

Re : Administration d un base: dump, restore et inject de données

pour le restore j utilise la commande pour une injection de data avec l option "-c" pour faire un clean avant.
Par contre dans le cas d un inject (sans clean donc) si une table est vide et qu il n y a rien a injecter la commande s arrete et n essaye pas d injecter les data sur dans les autres tables.
exemple avec table1 et backup vide, et table2 et backup avec data :

1/ backup des tables 1 et 2
2/ clean de la base
3/ inject -t table1 -t table2  a partir du backup 1/
l insert des data n est pas fait dans la table2 et en verbose je n ai pas de message d erreur

Hors ligne

#6 28/01/2014 13:38:11

gleu
Administrateur

Re : Administration d un base: dump, restore et inject de données

Ce serait tellement plus simple si vous indiquiez les commandes que vous saisissez...


Guillaume.

Hors ligne

#7 28/01/2014 19:18:06

devjava83
Membre

Re : Administration d un base: dump, restore et inject de données

elles sont dans le premier post avec pour la selection des tables -t bale1 en plus. j utilise pg restore pour faire "l inject"

Hors ligne

#8 29/01/2014 10:33:49

Bidou
Membre

Re : Administration d un base: dump, restore et inject de données

Si vous avez dumpé uniquement les données des tables associées, il est inutile de préciser lors du restore les tables que vous souhaitez restaurer (donc pas besoin des "-t")

Hors ligne

#9 29/01/2014 17:45:42

devjava83
Membre

Re : Administration d un base: dump, restore et inject de données

je suis oblige de preciser car certaines tables ne doivent pas etre restaures
J ai un soucis avec l utilisation de pg_restore: lorsque je restore (insert data) j ai une erreur "DETAIL:  Key (grp_id)=(1) already exists "
Y a t il une option a utiliser au moment du dump ou du restore pour lui indiquer d incremeter les pk ?

Hors ligne

#10 29/01/2014 19:08:29

Bidou
Membre

Re : Administration d un base: dump, restore et inject de données

Pouvez-vous copier les requêtes exactes que vous lancez pour le dump et le restore (pas comme sur le premier post).
Car normalement le dump contient les pk donc pas besoin d'incrémenter vous même.

Hors ligne

#11 29/01/2014 19:23:15

devjava83
Membre

Re : Administration d un base: dump, restore et inject de données

dump des données:
/usr/bin/pg_dump --host=$HOST --username="$USERNAME" --role="$ROLE" --format=custom --blobs --section=data $VERBOSE --file="$FILE" $DATABASE -t "$TABLE1" -t "$TABLE2"



restore des données (injection sans clean TABLE1 avec primary key):
/usr/bin/pg_restore --host $HOST --username "$USERNAME" --dbname "$DATABASE" --role "$ROLE " $VERBOSE "$FILE"  -t "$TABLE1" -t "$TABLE2"

Merci pour votre aide

Dernière modification par devjava83 (29/01/2014 19:23:28)

Hors ligne

#12 29/01/2014 22:00:36

gleu
Administrateur

Re : Administration d un base: dump, restore et inject de données

Si vous avez un soucis avec les PK, c'est que la table existe déjà et qu'elle contient des données.


Guillaume.

Hors ligne

#13 30/01/2014 11:42:47

devjava83
Membre

Re : Administration d un base: dump, restore et inject de données

>> Si vous avez un soucis avec les PK, c'est que la table existe déjà et qu'elle contient des données.

merci d avoir pris le temps de repondre.
pg_restore permet d'insérer des données provenant d une autre base. le PK est incrémenté automatiquement.
lors de la restoration d un backup provenant d une autre base il se peut que les PK soient identique alors que les donnees ne le soient pas.
Je cherche une option ou une autre facon d'inserer/merger des donnees sans tenir compte des PK par l utilisation d un auto incremente comme lors d un insert

Hors ligne

#14 30/01/2014 12:22:26

Bidou
Membre

Re : Administration d un base: dump, restore et inject de données

Nous savons ce qu'est pg_restore, l'usage que vous en faites par contre ne semble pas être cohérent.
Les PK ne sont pas incrémentées automatiquement puisque que le dump contient la PK en dur.
Si des données sont déjà présentes dans votre table, il vous faut donc les enlever ou alors modifier les inserts du dump pour enlever les PK écrites en dur.

Hors ligne

#15 30/01/2014 12:40:29

devjava83
Membre

Re : Administration d un base: dump, restore et inject de données

lors de l insert des donnees les PK sont incremetes automatiquement ?
Comment se fait il que le restore n ai pas une option pour faire de meme ? je precise que je fait un dump des data.
Le restore sans l option -c insert des data, cela veut alors dire que la commande ne gerer pas le cas ou il y a une PK identique (bug ou evolution ?)

Hors ligne

#16 30/01/2014 12:53:49

Bidou
Membre

Re : Administration d un base: dump, restore et inject de données

Ce n'est ni un bug ni une évolution nécessaire, lorsque vous dumpez vos données, il est spécifier la PK existante dans la base source.
Lorsque vous réinsérez ces données, il ne va pas changer la PK car sinon les données ne seront plus cohérentes avec la source initiale.
Il faut comprendre que les données que vous insérez ne sont pas considérées comme de nouvelles données mais bien comme des données figées donc avec une PK figée.

Hors ligne

#17 30/01/2014 18:59:09

devjava83
Membre

Re : Administration d un base: dump, restore et inject de données

Peut on au moment du dump executer une filtre SQL. Par exemple:
recuperer les donnees dont la valeur est > X (je souhaite verifier les pk) ?
Merci d avance

Hors ligne

#18 30/01/2014 19:03:39

Bidou
Membre

Re : Administration d un base: dump, restore et inject de données

Vous ne pouvez pas faire ça avec pg_dump.
COPY vous permet par contre de faire quelque chose de ce type (cf http://www.postgresql.org/docs/9.3/stat … copy.html)

Hors ligne

#19 30/01/2014 20:10:41

devjava83
Membre

Re : Administration d un base: dump, restore et inject de données

merci pour le lien. j ai trouve COPY apres avoir poste mon dernier message.
J ai egalement trouve quelque chose de tres insteressant si cela fonctionne avec pg dump

-- Backup recently updated tables based on auto analyze date
SELECT 'pg_dump ' || ' -h localhost -p 5432 -U postgres  -F c -b -v -f "/pgbak/somedb_keytbls.backup" ' ||
  array_to_string(ARRAY(SELECT '-t ' || schemaname || '.' || relname
        FROM pg_stat_user_tables
        WHERE last_autoanalyze > ( CURRENT_TIMESTAMP - (INTERVAL '1 day') )  )
    , ' ') || ' somedb'



Pernet d ajouter un filtre SQL au pg dump. l objectif est de ne pas dumper toute la base mais selon les donnees de la journee par exemple
Par contre je ne sais pas comment l adapter avec mon schema.
Je dois dump 5 tables et le filtre sur la date est a appliquer sur le timstamp de la view.
Dans cet exemple on ne selectionne qu une seule table alors que moi je veux pouvoir appliquer le filtre sur toutes mes tables.
si je fait un SELECT * FROM toutes mes tables le resultat sort sous forme d un seul tableau ?

Hors ligne

#20 31/01/2014 00:56:42

rjuju
Administrateur

Re : Administration d un base: dump, restore et inject de données

Dans votre exemple vous aurez autant de "-t nom_schema.nomtable" que de tables ayant eu un autoanalyze dans la journée. Je ne comprends pas très bien la question, vous voulez récupérer les noms de tables en filtrant sur le contenu d'un champ dans chacune de ces tables ?

Hors ligne

#21 03/02/2014 10:50:21

devjava83
Membre

Re : Administration d un base: dump, restore et inject de données

Voici les fonctionnalités que je souhaite développer:
- faire un dump d une base de données contenant beaucoup de données
au vu de la taille important des donnees: extraire sous forme d un fichier .backup les données enregistrées dans une periode de temps

- faire un restore des donnees backupees
Injecter les donnees sans faire un clean au prealable


Le but etant lors de test manuels de pouvoir sauvegarder les donnees en base dans un .backup puis les restaurer dans une autre base pour pouvoir les exploiter/analyser.

Hors ligne

#22 03/02/2014 18:21:58

gleu
Administrateur

Re : Administration d un base: dump, restore et inject de données

Il doit être possible de modifier le code source de pg_dump pour faire cela. En tout cas, la version actuelle ne le fait pas.

Par contre, le vrai soucis n'est pas là. Il est plutôt à la restauration. Si vous faites des restaurations partielles et que vous avez des clés étrangères, il est possible que les données ne soient pas toutes restaurables.


Guillaume.

Hors ligne

#23 03/02/2014 18:24:38

devjava83
Membre

Re : Administration d un base: dump, restore et inject de données

Les commandes pg_dump et restore ne sont pas adaptées à ce que je veux faire.
Cela devrait etre possible en SQL.
Merci pour votre aide

Hors ligne

Pied de page des forums