Tous les termes du glossaire

Vue matérialisée

Qu’est-ce qu’une vue matérialisée dans PostgreSQL ?

Une vue matérialisée stocke le résultat d’une requête pour qu’il puisse être lu comme une table. Les lectures sont rapides, mais les données ne changent que lorsque vous exécutez REFRESH MATERIALIZED VIEW.

Une vue matérialisée exécute une fois sa requête de définition et en stocke le résultat, contrairement à une vue ordinaire, qui exécute sa requête à chaque lecture. La lire est aussi rapide que lire une table, et elle peut avoir ses propres index.

Les données stockées ne suivent pas les changements des tables sous-jacentes ; elles ne changent que lorsque vous exécutez REFRESH MATERIALIZED VIEW. Un rafraîchissement simple bloque les lectures de la vue pendant son exécution. Avec CONCURRENTLY, les lectures peuvent continuer pendant le rafraîchissement, ce qui exige au moins un index unique sur la vue et peut être plus rapide lorsque seules quelques lignes changent.

Exemple

L’exemple calcule le total des ventes par zone dans une vue matérialisée, enregistre une nouvelle vente et rafraîchit la vue avec CONCURRENTLY, ce que permet l’index unique. Le total de north n’inclut la nouvelle vente qu’après le rafraîchissement.

CREATE TABLE sales (id int PRIMARY KEY, region text, amount numeric);
INSERT INTO sales
SELECT g, (ARRAY['north', 'south', 'east'])[1 + g % 3], g % 50
FROM generate_series(1, 30000) AS g;

CREATE MATERIALIZED VIEW sales_by_region AS
  SELECT region, sum(amount) AS total FROM sales GROUP BY region;
CREATE UNIQUE INDEX ON sales_by_region (region);

INSERT INTO sales VALUES (30001, 'north', 1000);
REFRESH MATERIALIZED VIEW CONCURRENTLY sales_by_region;
SELECT * FROM sales_by_region ORDER BY region;

Du SQL simple pour PostgreSQL 16 ou 17 standard, sans aucune extension. Exécutez-le dans une base de données vide que vous pouvez jeter ensuite.

Références

Documentation officielle de PostgreSQL (en anglais).

Termes associés