</>
Plan du cours — 39/64

Vues et vues matérialisées

Avancé

Une vue enregistre une requête sous un nom ; une vue matérialisée enregistre aussi son résultat : lecture instantanée, mais à rafraîchir.

CREATE VIEW commandes_payees AS
SELECT * FROM commandes WHERE statut = 'paye';          -- simple alias : recalculée à chaque lecture

CREATE MATERIALIZED VIEW ventes_par_jour AS
SELECT cree_le::date AS jour, count(*) AS nb, sum(total) AS ca
FROM   commandes
GROUP  BY 1;

CREATE UNIQUE INDEX ON ventes_par_jour (jour);          -- requis pour un rafraîchissement sans blocage
REFRESH MATERIALIZED VIEW CONCURRENTLY ventes_par_jour;  -- les lectures continuent pendant le rafraîchissement

Quand l'utiliser#

  • Tableaux de bord et rapports coûteux, tolérant des données un peu anciennes.
  • Précalcul d'agrégats, avec un REFRESH planifié (cron, pg_cron).

Astuce : REFRESH MATERIALIZED VIEW CONCURRENTLY exige un index unique et recalcule tout : pour des données volumineuses et fréquentes, préférez une table de résumé mise à jour de manière incrémentale (trigger ou traitement par lots).