Carregando...
Banco de DadosPostgreSQL

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 teste
SELECT 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 ANALYZE
SELECT *
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 ANALYZE
SELECT *
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)
Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *