Les vues matérialisées vous permettent de stocker physiquement les résultats de requêtes complexes et de les mettre à jour périodiquement. Ils sont donc utiles dans les cas où vous avez besoin d'un accès rapide aux données pour le reporting et l'informatique décisionnelle. Voici comment créer une vue matérialisée dans PostgreSQL.
Vue PostgreSQL vs vue matérialisée
Les vues matérialisées sont similaires aux vues PostgreSQL qui vous permettent de stocker des requêtes SQL pour les appeler plus tard. Cependant, la vue PostgreSQL vous permet de stocker uniquement la requête SQL et non son résultat. Les vues matérialisées vous permettent de stocker physiquement le résultat de la requête et de le mettre à jour périodiquement. Par conséquent, les vues matérialisées sont plus rapides que les vues PostgreSQL.
Lecture bonus :comment obtenir la dernière ligne par groupe dans PostgreSQL
Comment créer une vue matérialisée dans PostgreSQL
Vous pouvez créer une vue matérialisée dans PostgreSQL en utilisant l'instruction CREATE MATERIALIZED VIEW comme indiqué ci-dessous.
CREATE MATERIALIZED VIEW view_name AS query WITH [NO] DATA;
Dans la déclaration ci-dessus, vous devez mentionner view_name ainsi que la requête dont vous souhaitez stocker le résultat dans la vue matérialisée.
Enfin, vous pouvez également spécifier l'option WITH DATA si vous souhaitez charger des données dans la vue au moment de sa création. Si vous mentionnez SANS DONNÉES, la vue sera signalée comme illisible et vous ne pourrez pas interroger les données de la vue tant que vous n'y aurez pas chargé les données.
Lecture bonus :fonction de création PostgreSQL
Actualisation de la vue matérialisée PostgreSQL
Vous pouvez charger des données dans une vue matérialisée à l'aide de l'instruction REFRESH MATERIALIZED VIEW comme indiqué
REFRESH MATERIALIZED VIEW view_name
Vous pouvez également utiliser l'instruction ci-dessus pour actualiser la vue matérialisée.
Veuillez noter que l'instruction REFRESH MATERIALIZED VIEW verrouille les données de la requête afin que vous ne puissiez pas exécuter de requêtes dessus. Vous pouvez l'éviter en utilisant l'option CONCURRENTLY
REFRESH MATERIALIZED VIEW CONCURRENTLY view_name
Dans ce cas, PostgreSQL crée une vue temporaire, la compare avec la vue d'origine et effectue les insertions, mises à jour et suppressions nécessaires. Par conséquent, l'option CONCURRENTLY n'est disponible que pour les vues matérialisées qui ont un index unique.
Pour actualiser automatiquement la vue matérialisée périodiquement, vous pouvez exécuter REFRESH MATERIALIZED VIEW via un script automatisé.
Lecture bonus :Créer un schéma PostgreSQL
Supprimer les vues matérialisées
Vous pouvez supprimer des vues matérialisées à l'aide de l'instruction DROP MATERIALIZED VIEW.
DROP MATERIALIZED VIEW view_name
Exemples de vues matérialisées
Examinons quelques exemples de vues matérialisées.
Voici la requête pour créer une vue matérialisée appelée sample_view
postgres=# create materialized view sample_view as select * from sales with no data;
Dans la requête ci-dessus, nous avons mentionné l'option SANS DONNÉES afin que la vue ne contienne aucune donnée et génère une erreur lorsque nous essayons de l'interroger.
postgres=# select * from sample_view; ERROR: materialized view "sample_view" has not been populated HINT: Use the REFRESH MATERIALIZED VIEW command.
Nous allons maintenant actualiser la vue pour y charger des données, puis exécuter la requête ci-dessus sur notre vue.
postgres=# refresh materialized view sample_view; REFRESH MATERIALIZED VIEW postgres=# select * from sample_view; order_date | sale ------------+------ 2020-04-01 | 210 2020-04-02 | 125 2020-04-03 | 150 2020-04-04 | 230 2020-04-05 | 200 2020-04-10 | 220 2020-04-06 | 250 2020-04-07 | 215 2020-04-08 | 300 2020-04-09 | 250
Comme vous pouvez le voir ci-dessus, lorsque nous exécutons à nouveau notre requête, nous obtenons le résultat.
J'espère que vous pouvez maintenant créer facilement une vue matérialisée pour votre base de données.
Ubiq permet de visualiser facilement les données en quelques minutes et de les surveiller dans des tableaux de bord en temps réel. Essayez-le aujourd'hui !