CREATE MATERIALIZED VIEW sales_summary AS
SELECT date_trunc('month', created) AS month,
SUM(total) AS revenue
FROM orders
GROUP BY 1;
-- Refresh manually
REFRESH MATERIALIZED VIEW sales_summary;
-- Refresh concurrently (no lock)
REFRESH MATERIALIZED VIEW CONCURRENTLY sales_summary;Materialized views store query results physically — great for heavy dashboards.