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 la consulta es rápida, o no importa que se tarde
- Cuando los datos que se reflejan en la vista deben ser lo mas actuales posibles
Cuando usar vistas materializadas:
- La consulta para generar la vista es muy lenta y no se puede tolerar la lentitud
- Cuando hay tolerancia para que los datos de la vista no sean los mas actualizados