Vous n'êtes pas identifié(e).
Salut,
Dans ce post(http://forums.postgresql.fr/viewtopic.php?id=1747 ), j'ai detaillé un peu le contexte de mon application qui se resume comme suit:
Je recois quotidiennement des données provenant des roulottes sous forme de fichier .backup que je restore dans une bd-B pour voir les resultats et ensuite, je recupere les scripts sql pour mettre a jour la base principale bd-A. cela me prend souvent une 30taine de minutes.je souhaite automatiser cette tache de mise ajour de la base bd-A a partir des fichiers .backup que je recois
Ma question est:
1-Comment faire pour envoyer les nouvelles données et aussi les modifications apportées de bd-B vers bd-A?
2-Est ce qu'il faut faire une fusion des deux bases, si oui comment?
3-s'il s'agit d'une replication, quel outil est adapté pour cela entre Slony, londiste, bucardo, pgpool, etc ?
Merci
Hors ligne
Pour envoyer les nouvelles données et modifications, vous avez plusieurs stratégies:
- Développer votre solution (à base de triggers qui tracent ce qui a été fait, afin de pouvoir appliquer les modifications)
- Faire effectivement de la réplication. Vu ce que vous voulez faire, un slony ou londiste ferait l'affaire. Attention, ils répliquent des tables. Vous avez donc intérêt si vous partez dans cette direction à avoir des tables correspondant à toutes vos bases satellites dans votre base principale, qui recevront les modifications quand les satellites pourront se connecter. Il vous restera tout de même à écrire des requêtes/bouts de PL/ce que vous voulez pour faire une fusion de ces tables dans la base principale. Mais comme ces tables pourront faire partie de votre base principale, vous pourrez tout faire de façon efficace avec des requêtes
- Utiliser un outil externe (ETL par exemple) pour trouver les modifications et les appliquer. Cette solution sera certainement plus simple à développer (pour peu que vous connaissiez un ETL, sinon il y a une grosse prise en main), et consommera probablement beaucoup plus de bande passante
- Utiliser un outil comme pg_comparator : http://2009.pgday.eu/fabien_coelho , http://www.cri.ensmp.fr/~coelho/pg_comparator/ , qui est capable de trouver le delta entre une table locale et une table distante en minimisant la bande passante utilisée.
Si quelqu'un d'autre a des idées supplémentaires…
Marc.
Hors ligne
Salut Marc,
Merci pour tes reponses, j'etais en congé, jài profité pour mettre en place un ETL.
dans ta 1e solution, tu as parlé d`une solution a bse de triggers.peux tu m`en dire plus sur cette solution ou me montrer un exemple?
merci
Hors ligne
un exemple, non, mais l'idée c'est d'avoir un trigger sur la (ou les) tables qui t'intéressent, qui trace (dans une table journal par exemple) ce qui change (les changements pertinents au sens applicatif). Et avoir un programme qui utilise ces table journal pour fusionner les données des serveurs, le programme pouvant être un autre bout de PL utilisant un dblink par exemple.
Marc.
Hors ligne
interessant, quelqu'un a t'il un moyen pour ecrire dans un fichier(en cas de insert,update ou delete) grace à un trigger ?
Hors ligne
un peu comme dans le cas du fichier fichier postgres.conf
Hors ligne
Pas avec PL/pgsql en tout cas. Mais avec PL/perl ou PL/python, oui, bien sûr. Vous avez accès à toutes les bibliothèques Perl/Python dans ce cas là. De même avec une fonction en C.
Guillaume.
Hors ligne
Pas avec PL/pgsql en tout cas. Mais avec PL/perl ou PL/python, oui, bien sûr. Vous avez accès à toutes les bibliothèques Perl/Python dans ce cas là. De même avec une fonction en C.
en SQL, on peut utiliser COPY TO pour écrire dans un fichier, donc via un trigger si on veut vraiment.
Cédric Villemain +33 (0)6 20 30 22 52
http://2ndQuadrant.fr/
PostgreSQL: Support 24x7 - Développement, Expertise et Formation
Hors ligne
Oui, effectivement. Mais à partir de ce moment là, ça veut dire qu'on fait un COPY vers un fichier, donc faut être super utilisateur. Donc avoir un trigger security definer avec quelque chose qui écrit dans un fichier dedans. C'est pour cela qu'on avait jeté un voile pudique sur le sujet, je pense
Marc.
Hors ligne
Oui, effectivement. Mais à partir de ce moment là, ça veut dire qu'on fait un COPY vers un fichier, donc faut être super utilisateur. Donc avoir un trigger security definer avec quelque chose qui écrit dans un fichier dedans. C'est pour cela qu'on avait jeté un voile pudique sur le sujet, je pense
certe ... j'ai pas lu tout le thread.
mais on peut lire, liste et éditer des fichiers en SQL ou PL/pgsql. En ajoutant un security definer, pas besoin d'etre superuser pour accéder à tel ou tel fichier.
Je m'en sers pour faire des démos de comment il est dangereux de laisser une appli etre superuser (au lieu d'utiliser security definer, et de controler I/O)
Cédric Villemain +33 (0)6 20 30 22 52
http://2ndQuadrant.fr/
PostgreSQL: Support 24x7 - Développement, Expertise et Formation
Hors ligne