Visões materializadas e estratégias de REFRESH
Persista o resultado de uma consulta dispendiosa com MATERIALIZED VIEW e atualize-o conforme uma agenda ou sob demanda.
Visões materializadas e estratégias de REFRESH é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.
Visualização materializada = resultado salvo
Ao contrário de uma visualização comum, uma visualização materializada armazena em disco o resultado de seu SELECT. As consultas acessam os dados armazenados — rapidamente. Atualize sob demanda.
CREATE MATERIALIZED VIEW daily_revenue AS
SELECT date_trunc('day', created_at) AS day,
SUM(total) AS revenue
FROM orders
GROUP BY 1;Consulta
As consultas são apenas SELECTs nos dados materializados:
SELECT * FROM daily_revenue WHERE day >= NOW() - INTERVAL '30 days';REFRESH MATERIALIZED VIEW
Recalcule o resultado. Bloqueia a visualização exclusivamente:
REFRESH MATERIALIZED VIEW daily_revenue;
-- Selects on the view block during refresh.REFRESH MATERIALIZED VIEW CONCURRENTLY
Atualização sem bloqueio — os leitores continuam sendo atendidos pelos dados antigos até que os novos estejam prontos. Exige um índice UNIQUE na visualização:
CREATE UNIQUE INDEX ON daily_revenue (day);
REFRESH MATERIALIZED VIEW CONCURRENTLY daily_revenue;Índices em visualizações materializadas
Pode criar um índice em uma visualização materializada como em qualquer tabela — isso acelera as consultas:
CREATE INDEX daily_revenue_day_idx ON daily_revenue (day DESC);Quando materializar
Utilize visualizações materializadas quando:
- A consulta subjacente for dispendiosa
- O resultado tolerar ficar ligeiramente desatualizado
- A consulta for executada muitas vezes entre atualizações
Atualização programada
Não há um agendador integrado. Utilize pg_cron, uma tarefa cron do sistema operacional ou o agendador do aplicativo:
-- Via pg_cron extension:
SELECT cron.schedule('refresh_daily', '0 1 * * *', 'REFRESH MATERIALIZED VIEW CONCURRENTLY daily_revenue;');Atualização incremental
O PostgreSQL não oferece atualização incremental nativa — cada REFRESH recalcula tudo desde o início. Para agregação incremental, considere:
- "Tabelas de resumo" criadas manualmente com base em gatilhos
- Agregações contínuas do TimescaleDB
- A extensão pg_ivm (visualizações materializadas incrementais)
Ler tabelas subjacentes sem afetar as leituras
A atualização CONCURRENT lê as tabelas subjacentes em um instantâneo transacional — não as bloqueia. Porém, a própria atualização pode ser lenta em conjuntos de dados enormes.
Uso de disco
Uma visualização materializada duplica o armazenamento dos seus dados. Planeje o espaço em disco adequadamente.
Combinação com particionamento
Para séries temporais enormes, particione a visualização materializada (ou utilize TimescaleDB):
CREATE MATERIALIZED VIEW orders_summary AS ... ;
CREATE INDEX ON orders_summary (day);
-- For very large views, consider regular table + manual upsert pattern.Quando não utilizar
Se suas leituras tolerarem SQL com dados atuais e a consulta subjacente já for rápida, poupe o trabalho de manutenção das atualizações. Visualizações materializadas são uma compensação — atualidade por velocidade.
Recapitulação
Visualizações materializadas armazenam em cache os resultados das consultas.
- Armazenadas em disco, indexadas e rápidas
- REFRESH manualmente ou conforme uma programação
- CONCURRENTLY exige um índice UNIQUE
- Utilize para agregações dispendiosas e ligeiramente desatualizadas
Verificação rápida
O que REFRESH MATERIALIZED VIEW CONCURRENTLY exige que a atualização básica não exige?
Perguntas Frequentes
A aula “Visões materializadas e estratégias de REFRESH” é grátis?
Sim — o texto completo de “Visões materializadas e estratégias de REFRESH” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.
O que vou aprender em “Visões materializadas e estratégias de REFRESH”?
Persista o resultado de uma consulta dispendiosa com MATERIALIZED VIEW e atualize-o conforme uma agenda ou sob demanda. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Academy?
Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Visões materializadas e estratégias de REFRESH”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Academy?
Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Visões simples: reutilização lógica
- Visões atualizáveis e gatilhos INSTEAD OF
- Visões materializadas e estratégias de REFRESH
- Quando pré-agregar