Visoes materializadas sao recursos introduzidos na versao 9.3 do postgresql. Enquanto visoes tradicionais reexecutam uma consulta sempre que sao referenciadas, visoes materializadas dispensam este esforco pelos seus dados ja estarem guardados desde a sua criacao ou do ultimo refresh (atualizacao de visao). Pode-se dizer que uma visao materializada e um objeto que contem o resultado de uma consulta, facilitando o acesso aos dados nela contidos. A principal justificativa para se utilizar visoes materializadas e a aceleracao de consultas em grandes massas de dados. E importante observar que em sistemas com pouco espaco em disco e discos lentos, visoes materializadas podem ter pouco efeito ou ate impacto negativo por sobrecarregar ainda mais o hardware.Para ter ainda mais desempenho,. e possivel criar indices para visoes materializadas. No postgresql, a atualizacao de uma visao materializada e feita atraves do comando REFRESH MATERIALIZED VIEW, enquanto que a mudanca do codigo da consulta da visao e feita atraves do comando ALTER MATERIALIZED VIEW. A exclusao de visoes materializadas e feita com o comendo DROP MATERIALIZED VIEW. Sintaxe basica:CREATE MATERIALIZED VIEW nome_tabela [ (nome_coluna [, ...] ) ] [ WITH ( storage_parameter [= value] [, ... ] ) ] [ TABLESPACE nome_tablespace ] AS consulta [ WITH [ NO ] DATA ]Exemplo 1: Criacao de uma visao materializada simplesCREATE MATERIALIZED VIEW lista_tabelas ASSELECT tablename FROM PG_TABLES ORDER BY tablename;Exemplo 2: Refresh dos dados de uma visao materializada, pelo comando REFRESH MATERIALIZED VIEW.REFRESH MATERIALIZED VIEW lista_tabelas;Exemplo 3: Exclusao de uma visao materializada utilizando DROP MATERIALIZED VIEW. O comando drop view nao exclui visoes materializadas, e sim gera erro.DROP MATERIALIZED VIEW lista_tabelas;Exemplo 4: Criacao de uma visao materializada sem dados. Neste caso, o comando REFRESH MATERIALIZED VIEW pode ser utilizado para popular a visao armazenada.CREATE MATERIALIZED VIEW lista_tabelas_nodata ASSELECT tablename FROM PG_TABLES ORDER BY tablename WITH NO DATA;Exemplo 5: Criacao de uma visao materializada simples, explicitando o tablespace utilizadoCREATE MATERIALIZED VIEW lista_indices TABLESPACE pg_default ASSELECT schemaname, tablename, indexname, tablespace FROM PG_INDEXES;Exemplo 6: Criacao de uma visao materializada simples, utilizando o storage parameter fillfactor. Sao aceitos todos os tipos de storage parameters de uma tabela padrao, exceto OIDs, pois visoes materializadas nao apresentam identificador OID para cada registro.CREATE MATERIALIZED VIEW lista_indices_fill50 WITH (fillfactor = 50) ASSELECT schemaname, tablename, indexname, tablespace FROM PG_INDEXES;Exemplo 7: Para saber quantas visoes armazenadas voce tem no seu servidor, utilize a visao PG_MATVIEWS.SELECT * FROM PG_MATVIEWS;Exemplo 8: Alteracao de visao materializada. O comando ALTER MATERIALIZED VIEW apresenta uma sintaxe mais elaborada, merecendo mais espaco em um texto futuro.ALTER MATERIALIZED VIEW lista_tabelas RENAME TO lista_relacoes;* ConclusoesVisoes materializadas sao uma boa opcao para aumento de performance sob certas condicoes. Tambem facilitam a importacao de visoes materializadas disponiveis em outros SGBDs como ORACLE e SQL SERVER.A implementacao de visoes materializadas e relativamente facil e bastante util.Voce ja utilizou esta funcionalidade nos seus projetos? Qual foi a sua opiniao? O site http://explain.depesz.com/ disponibiliza uma ferramenta bastante util, que formata, extrai e a apresenta de forma relativamente simples o conteudo dos planos de execucao do postgresql, permitindo uma analise mais facil do mesmo. A promessa deste aplicativo e ajudar a encontrar a