VIEWS no PostgreSQL
As VIEWs são basicamente uma forma de armazenar um SELECT dentro do banco de dados, dando a ele um nome e permitindo que ele seja acessado e consultado como se fosse uma tabela a partir do seu nome.
Imagine que temos a seguinte tabela:
CREATE TABLE teste( id integer PRIMARY KEY, partition integer NOT NULL, value integer NOT NULL ); -- E criar um índice para a coluna partition CREATE INDEX idx_partition ON teste(partition);
E inserimos nela vários dados:
INSERT INTO testeSELECT generate_series(1,100000,1) AS "id", random_between(1,5) AS "partition", random_between(0,100) AS "value" ;
-- Função random_between(x,y)CREATE OR REPLACE FUNCTION random_between(low INT ,high INT) RETURNS INT AS $$ BEGIN RETURN floor(random()* (high-low + 1) + low); END; $$ language 'plpgsql' STRICT;
Queremos criar uma VIEW em que tenhamos apenas partition = 2
CREATE VIEW teste_2 AS(SELECT "id", "partition", "value" WHERE "partition" = 2 );
Assim podemos chamar teste_2 como se fosse uma tabela
SELECT *FROM teste_2;
Ao darmos EXPLAIN ANALYZE nessa consulta, percebemos que o índice é utilizado.
EXPLAIN ANALYZESELECT * FROM este_2;
Podemos fazer outros filtros em cima da VIEW como:
SELECT *FROM teste_2 WHERE value > 50;
E ao rodarmos EXPLAIN ANALYZE percebemos que os índices e otimizações continuam sendo feitos. Isso significa que mesmo utilizando VIEWs sua query estará sendo otimizada pelo query optimizer do PostgreSQL.
EXPLAIN ANALYZESELECT * FROM teste_2 WHERE value > 50;
Em resumo, o conceito de VIEW pode ser usado para :
- simplificar consultas complexas em tabelas, já definindo vários filtros pré cadastrados
- segurança de acesso em tabelas, permitindo que um usuário faça SELECT na VIEW mas não na tabela original (assim ele só verá uma porção filtrada da tabela)