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 05/11/2019 10:59:41

HadanMarv
Membre

Script avec la définition complète des vues matérialisées

Bonjour,

J'ai commencé le développement d’agrégation et de consolidation de données dans ma base de données Postgres.
En gros j'ai des centaines de tables, sur lesquelles je viens faire des pré-calculs via des consolidations et ensuite je les agrège entre elles.
Je me retrouve avec prêt de 200 vues matérialisé avec des performances corrects compte tenu de la volumétrie de données à traiter.

En cherchant sur le net, j'ai trouvé assez vite comment analyser le catalogue postgres pour créer un script me permettant de rafraîchir les vues dans le bonne ordre.

Mon problème :
Certaines des vues doivent être corrigés de temps en temps (mauvaise données en entrée, nouvelles règles de calcul, etc...)
Mais si la vue à des dépendances enfants, je suis d'abord obligé de droper les enfants avant de pouvoir droper la vue en question et de tout recréer.
çà se fait mais c'est pénible car tout à la main (avec l'arbre de dépendance, copier / coller des scripts dans une console dans le bon ordre, et exécution).

Ma question : existe-t-il une requête qui me permettrait de récupérer l'intégralité des définitions des vues matérialisés ? j'ai trouvé dans le catalogue le champ view_deifnition (information_schema.views) mais le champ est tronqué...
D'avance merci de vos retours.

HadanMarv

Hors ligne

#2 05/11/2019 17:27:39

rjuju
Administrateur

Re : Script avec la définition complète des vues matérialisées

Bonjour,


Vous pouvez utiliser la fonction pg_get_viewdef(), cf https://www.postgresql.org/docs/current … ALOG-TABLE .

Hors ligne

#3 06/11/2019 10:32:54

HadanMarv
Membre

Re : Script avec la définition complète des vues matérialisées

Effectivement, en fait je me rends compte que c'est "juste" une limitation de PgAdmin.

Du coup pour ceux que çà pourrait intéresser voici ce que j'ai fait :
1. Création d'un vue des dépendances entre vues
2. Création d'une table basique avec deux champs, un id et un champ query (oui j'ai cherché longtemps celui-là smile )
3. Création d'une fonction (pl/sql) prenant en paramètre le nom du schéma et le nom de la vue que l'on souhaite modifier, cette fonction requête sur la vue créé plus haut et va créer les "drop" et les "create materialized view" dans le bon ordre
4. Modification à la main du script de la vue passé en étape 3 dans le champ query de la table mentionné en étape 2
5. Création d'une fonction (pl/sql), qui lie simplement les enregistrement de la table de l'étape 2 dans l'ordre (merci l'id) et qui fait un execute

Manque l'analyse du dico pour les index...
Mais globalement l'idée est là.

Si ce n'est pas clair -> dites le moi
Que vous pensez que je fais fausse route -> dites le moi
Que vous voulez les codes de mes fonctions -> dites le moi

Bonne journée
Anthony

Hors ligne

Pied de page des forums