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
REFRESHplanifié (cron,pg_cron).
Astuce :
REFRESH MATERIALIZED VIEW CONCURRENTLYexige 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).