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 17/09/2018 13:08:59

mgmpg
Membre

Automatisation de la liste des tables répliquées

Bonjour,

J'ai plein de bases qui chacunes contiennent des infos de pays.
Comme y'a un gros ménage de prévu les prochains mois, je pense à faire une base "country" (bon assez grosse quand même car il y aura les langues pratiquées par pays, l'appartenance à des groupes, des historiques de taux de devises, les traductions de tout ça, etc... une bonne vingtaine de tables en tout) dont je répliquerais les tables dans toutes mes autres bases.

Je laisse les fdw de coté pour cet usage (problèmes de perfs, séquenciers, pas possible d'utiliser des FK qui pointent dessus, ...).

Actuellement, j'ai un script bash qui part d'un dump sql pour en faire une version "nettoyée", que je pourrai lancer dans mes bases cibles:

echo "Preparing a cleaned sql dump to create all published tables in another database..."
pg_dump ${PG_PARAMS} --format=plain --no-owner --schema-only --no-acl ${DB_NAME} >${DB_NAME}_schema_only.pgdump.sql
# functions definition can end with $$; or $_$; or $_X$;
# views definitions have at least one space on the start of each line of the body (TODO: better pattern to check this)
pcregrep -vM \
  '(^$|^--|^SET |^COMMENT ON (DATABASE|EXTENSION|OPERATOR|FUNCTION|VIEW|) |^CREATE EXTENSION |^CREATE OPERATOR (\n|.)*?\);$|^CREATE TRIGGER |^CREATE FUNCTION (\n|.)*?\$_{0,1}X{0,1}\$;$|^CREATE VIEW (\n|.)*?;$|CREATE PUBLICATION |ALTER PUBLICATION )' \
  ${DB_NAME}_schema_only.pgdump.sql \
  >${DB_NAME}_schema_only.pgdump.cleaned.sql

Voyez vous/existe-t-il une meilleure méthode ?

J'envisageais aussi de passer par un fdw sur la base cible vers la base country pour analyser son dico et y retrouver les tables publiées afin le les créer (mais il faut aussi trouver les définitions de types/domaines/etc... pas si facile!)

Hors ligne

#2 17/09/2018 19:34:16

gleu
Administrateur

Re : Automatisation de la liste des tables répliquées

Une réplication logique ferait les choses plus simplement, je pense. Que ce soit avec la version 10 ou avec les outils style Slony et Londiste.


Guillaume.

Hors ligne

#3 18/09/2018 08:40:09

mgmpg
Membre

Re : Automatisation de la liste des tables répliquées

Mais je vais/veux utiliser la réplication logique :-)
Lors du brexit, quand je vais retirer l'Angleterre du groupe europe dans ma base country, les autres bases vont récupérer cette modif, via "subscription", dans "leurs" tables country*...
Je me renseigne juste sur le meilleur moyen/astuce de créer et maintenir la structure de ces tables "mirroir" dans les bases qui s'abonnent...

Hors ligne

#4 18/09/2018 18:19:11

gleu
Administrateur

Re : Automatisation de la liste des tables répliquées

pg_dump -s pour la création de la structure des tables, et check_postgres pour vérifier si le schéma change et agir dans ce cas.


Guillaume.

Hors ligne

#5 19/09/2018 10:07:03

mgmpg
Membre

Re : Automatisation de la liste des tables répliquées

Ah, oui, j'aime bien l'idée de "détourner" un plugin Nagios pour comparer 2 schémas :-)

Hors ligne

Pied de page des forums