sql >> Base de Datos >  >> RDS >> PostgreSQL

Vista materializada de PostgreSQL

Las vistas materializadas le permiten almacenar físicamente los resultados de consultas complejas y actualizarlos periódicamente. Por lo tanto, son útiles en los casos en que necesita un acceso rápido a los datos para informes e inteligencia comercial. Aquí se explica cómo crear una vista materializada en PostgreSQL.


Vista de PostgreSQL frente a vista materializada

Las vistas materializadas son similares a las vistas de PostgreSQL que le permiten almacenar consultas SQL para llamarlas más tarde. Sin embargo, la vista de PostgreSQL le permite almacenar solo la consulta SQL y no su resultado. Las vistas materializadas le permiten almacenar el resultado de la consulta físicamente y actualizarlas periódicamente. Como resultado, las vistas materializadas son más rápidas que las vistas de PostgreSQL.

Lectura adicional:cómo obtener la última fila por grupo en PostgreSQL


Cómo crear una vista materializada en PostgreSQL

Puede crear una vista materializada en PostgreSQL usando la declaración CREATE MATERIALIZED VIEW como se muestra a continuación.

CREATE MATERIALIZED VIEW view_name
AS query 
WITH [NO] DATA;

En la declaración anterior, debe mencionar view_name así como la consulta cuyo resultado desea almacenar en la vista materializada.

Finalmente, también puede especificar la opción CON DATOS si desea cargar datos en la vista en el momento de su creación. Si menciona SIN DATOS, la vista se marcará como ilegible y no podrá consultar los datos de la vista hasta que los cargue.

Lectura adicional:función de creación de PostgreSQL


Actualización de la vista materializada de PostgreSQL

Puede cargar datos en la vista materializada usando la instrucción REFRESH MATERIALIZED VIEW como se muestra

REFRESH MATERIALIZED VIEW view_name

También puede usar la declaración anterior para actualizar la vista materializada.

Tenga en cuenta que la declaración REFRESH MATERIALIZED VIEW bloquea los datos de la consulta para que no pueda ejecutar consultas contra ellos. Puedes evitarlo usando la opción CONCURRENTEMENTE

REFRESH MATERIALIZED VIEW CONCURRENTLY view_name

En este caso, PostgreSQL crea una vista temporal, la compara con la original y realiza las inserciones, actualizaciones y eliminaciones necesarias. Como resultado, la opción CONCURRENTEMENTE está disponible solo para vistas materializadas que tienen un índice único.

Para actualizar automáticamente la vista materializada periódicamente, puede ejecutar REFRESH MATERIALIZED VIEW a través de un script automatizado.

Lectura adicional:esquema de creación de PostgreSQL


Eliminar vistas materializadas

Puede eliminar vistas materializadas mediante la declaración DROP MATERIALIZED VIEW.

DROP MATERIALIZED VIEW view_name


Ejemplos de vistas materializadas

Veamos algunos ejemplos de vistas materializadas.

Aquí está la consulta para crear una vista materializada llamada sample_view

postgres=# create materialized view sample_view
           as select * from sales
           with no data;

En la consulta anterior, hemos mencionado la opción SIN DATOS, por lo que la vista no tendrá ningún dato y dará un error cuando intentemos consultarla.

postgres=# select * from sample_view;
ERROR: materialized view "sample_view" has not been populated
HINT: Use the REFRESH MATERIALIZED VIEW command.

Ahora actualizaremos la vista para cargar datos en ella y luego ejecutaremos la consulta anterior en nuestra vista.

postgres=# refresh materialized view sample_view;
REFRESH MATERIALIZED VIEW

postgres=# select * from sample_view;
order_date | sale
------------+------
2020-04-01 | 210
2020-04-02 | 125
2020-04-03 | 150
2020-04-04 | 230
2020-04-05 | 200
2020-04-10 | 220
2020-04-06 | 250
2020-04-07 | 215
2020-04-08 | 300
2020-04-09 | 250

Como puede ver arriba, cuando ejecutamos nuestra consulta nuevamente, obtenemos el resultado.

Con suerte, ahora puede crear fácilmente una vista materializada para su base de datos.

Ubiq facilita la visualización de datos en minutos y el monitoreo en paneles en tiempo real. ¡Pruébalo hoy!