Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#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 .
Julien.
https://rjuju.github.io/
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à )
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