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 partitionCREATE 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_2WHERE 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_2WHERE 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)

You should also read:

PostgreSQL

# Instalando o wget para fazer download da chave do repositório # Instalando o wget, capaz de fazer downloads de documentos via HTTP…