Vistas en Postgres

Las vistas son pseudo tablas que se pueden utilizar para restringir el acceso a la información para ciertos usuarios, para conjuntar datos de distintas tablas, para generar reportes. Las vistas a pesar de no ser tablas reales se comportan como tales ante la selección, pero no pueden ser actualizadas, borradas o se les pueden hacer inserciones de la manera convencional. Las vistas tienen sus propios permisos, lo que significa que los usuarios no tienen por que interactuar con los datos originales y pueden seleccionar sólo un subconjunto de las tablas ya sea por filas o por columnas.

Para crear una vista se utiliza la sintaxis CREATE VIEW que puede generarse a través de una selección:

CREATE VIEW my_view AS
    SELECT column1, column2
    FROM table
    WHERE column3=2019;

La selección puede incluir subconsultas o meultiples tablas. Existe tambien la opción de utilizar la palabra clave TEMP o TEMPORARY las cuales se generan y desechan al final de la sesión.

Existen otro tipo de vistas, que conceptualmente se encuentran entre las tablas y las vistas llamadas vistas materializadas. Las vistas materializadas tienen la ventaja de que se pueden indexar, como las tablas, viven en la memoria y no necesariamente se refrescan al momento como las vistas.

Las vistas materializadas se crean con el siguiente tipo de sintaxis:

CREATE MATERIALIZED VIEW my_mat_view AS
    SELECT column1, column2
    FROM table
    WHERE column3=2019;

En el momento en el que la información de las tablas fuente cambia, tenemos que refrescar la vista materializada, esto se hace con el comando REFRESH.

REFRESH MATERIALIZED VIEW my_mat_view;

o para evitar bloquear la vista y poder hacer consultas al tiempo que se actualiza, podemos utilizar el modificador CONCURRENTLY:

REFRESH MATERIALIZED VIEW CONCURRENTLY my_mat_view;

Algunas ideas de cuando usar vistas y cuando usar vistas materializadas

Cuando usar vistas tradicionales:

Cuando usar vistas materializadas: