No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de PostgreSQL

Curso de PostgreSQL

Oswaldo Rodríguez González

Oswaldo Rodríguez González

Vistas

21/32
Recursos

Aportes 67

Preguntas 16

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Agarra una consulta que se realice muchas veces y colocarla bajo un solo nombre.
Centraliza muchos esfuerzos en una sola función.
Vista volátil: Siempre que se haga la consulta en la vista, la BD hace la ejecución de la consulta en la BD, por lo que siempre se va a tener información reciente.
Vista materializada: Hace la consulta una sola vez, y la información queda almacenada en memoria, la siguiente vez que se consulte, trae el dato almacenado, eso es bueno y malo a la vez, bueno porque la velocidad con la que se entrega la información es rápida, malo porque la información no es actualizada. Es ideal utilizar este tipo de vista en procesos que utilice días anteriores, porque el día de ayer, ya pasó y no hay razón para actualizarlo.
Para crear una vista volátil en postgres, damos click derecho a views, create, view, le damos un nombre, y en la pestaña code escribimos o pegamos el código de la consulta que queremos guardar, la guardamos y para usar la vista usamos:

    SELECT * FROM <nombre_vista>; y listo.

Para crear una vista materializada, primero creamos la consulta, y definimos si los datos nos interesan o no, luego, vamos a la opción materialized views, click derecho, create, materialized view. Se abre la ventana, le damos un nombre, termina con _mview, y en la pestaña Definition escribimos la consulta que necesitamos guardar. Guardamos.
Al probarla en este momento nos lanza un error, ¿por qué? porque no tiene datos almacenados. Para almacenar datos usamos:

    REFRESH MATERIALIZED VIEW <nombre vista>;

Y ahora si podemos consultarla:

    SELECT * FROM <nombre_vista_mview>;

En el caso de las vistas materializadas, es conveniente agregar una columna para indicar la fecha del último “refresh” de la información.

Tipos de vistas:
- Vista Volátil: Consulta con data actualizada
- Vista Materializada: Consulta con data persistente

Vistas

  • Vista Volatil
  • Vista Materializada: persistente (Ayer)
-- Creamos la vista
CREATE OR REPLACE VIEW public.rango_view
AS
    SELECT *,
        CASE
        WHEN fecha_nacimiento > '2015-01-01' THEN
            'Mayor'
        ELSE
            'Menor'
        END AS tipo
    FROM pasajero ORDER BY tipo;
ALTER TABLE public.rango_view OWNER TO postgres;

-- mostramos la vista
SELECT * FROM public.rango_view;

-- Vistas Materializada, no se cambia a menos que queramos que se cambie
SELECT * FROM viaje WHERE inicio > '22:00:00';

CREATE MATERIALIZED VIEW public.despues_noche_mview
AS
    SELECT * FROM viaje WHERE inicio > '22:00:00';
WITH NO DATA;
ALTER TABLE public.despues_noche_mview OWNER TO postgres;

-- observamos la vista
SELECT * FROM despues_noche_mview;

-- Damos refresh
REFRESH MATERIALIZED VIEW despues_noche_mview;

-- Borramos una tupla de viaje cuando el id = 2, para observar que no se borro
DELETE FROM viaje WHERE id = 2;

hay otro concepto que me parece importante y son las tablas temporales que se guardan en disco y se eliminan al cerrar la sesión,

create temporary table viajes_temp AS
select * from viajes;

Vistas 👀

.
Una vista es una alternativa para mostrar datos de varias tablas. Una vista es como una tabla virtual que almacena una consulta. Los datos accesibles a través de la vista no están almacenados en la base de datos como un objeto.
.
Entonces, una vista almacena una consulta como un objeto para utilizarse posteriormente. Las tablas consultadas en una vista se llaman tablas base. En general, se puede dar un nombre a cualquier consulta y almacenarla como una vista.
.

Las vistas permiten:

  • Ocultar información: generando el acceso a algunos datos y manteniendo oculto el resto de la información que no se incluye en la vista. El usuario solo puede consultar la vista.
    .
  • Simplificar la administración de los permisos de usuario: se pueden dar al usuario permisos para que solamente pueda acceder a los datos a través de vistas, en lugar de concederle permisos para acceder a ciertos campos, así se protegen las tablas base de cambios en su estructura.
    .
  • Mejorar el rendimiento: se puede evitar tipear instrucciones repetidamente almacenando en una vista el resultado de una consulta compleja que incluya información de varias tablas.
    .
    Podemos crear vistas con: un subconjunto de registros y campos de una tabla; una unión de varias tablas; una combinación de varias tablas; un resumen estadístico de una tabla; un subconjunto de otra vista, combinación de vistas y tablas.
    .
La sintaxis básica parcial para crear una vista es la siguiente:

 create view NOMBREVISTA as
  SENTENCIAS SELECT
   from TABLA;
El contenido de una vista se muestra con un "select":

 select *from NOMBREVISTA;
  • Vista Volátil: Consulta información en tiempo real
  • Vista Materializada: Consulta información guardada al momento de generar la vista.
    Si se desea actualizar la vista Materializada se debe ejecutar lo siguiente:
    REFRESH MATERIALIZED VIEW <Nombre de la vista materializada>

Las vistas son útiles porque nos ayudan a centralizar todos los esfuerzo en un solo lugar por otra parte las vistas volátil no guardan información de forma persistente, en cambio la vista materializada si, esto es útil cuando queremos consultar que datos ocurrieron el día ant.

Vistas en PostgreSQL

Tipos de vistas

  • Vistas estándar: consultas SELECT almacenadas como objetos que pueden ser referenciados por otras consultas o programas de aplicación.
  • Vistas volátiles: vistas que se recalculan cada vez que se consultan. Se utilizan para consultas que requieren datos en tiempo real y que se ejecutan con poca frecuencia.
  • Vistas materializadas: vistas que almacenan los resultados de una consulta SELECT en una tabla temporal para una consulta más rápida. Se utilizan para consultas que se ejecutan con frecuencia y que no cambian con frecuencia.

Creación de vistas

  • Vistas estándar: se utiliza la sintaxis CREATE VIEW, seguida de la consulta SELECT que define la vista.

    CREATE VIEW vista_ejemplo AS
    SELECT columna1, columna2, columna3
    FROM tabla_ejemplo
    WHERE columna4 = 'valor';
    
    
  • Vistas volátiles: se utiliza la sintaxis CREATE OR REPLACE VIEW, seguida de la consulta SELECT que define la vista.

    CREATE OR REPLACE VIEW vista_volatil AS
    SELECT columna1, columna2
    FROM tabla_ejemplo
    WHERE columna3 = 'valor';
    
    
  • Vistas materializadas: se utiliza la sintaxis CREATE MATERIALIZED VIEW, seguida de la consulta SELECT que define la vista.

    CREATE MATERIALIZED VIEW vista_materializada AS
    SELECT columna1, columna2
    FROM tabla_ejemplo
    WHERE columna3 = 'valor';
    
    

Actualización de vistas

  • Vistas volátiles: se recalculan automáticamente cada vez que se consultan.

  • Vistas materializadas: deben ser actualizadas manualmente utilizando la sintaxis REFRESH MATERIALIZED VIEW.

    
    REFRESH MATERIALIZED VIEW vista_materializada;
    
    

Beneficios de las vistas

  • Simplifican consultas complejas.
  • Reducen la cantidad de código necesario para realizar consultas comunes.
  • Proporcionan una vista personalizada de los datos de la base de datos para diferentes usuarios o aplicaciones.

Supongamos que somos los encargados de proporcionar información de los nuevos casos de COVID-19 registrados por los hospitales de nuestro país. Si la información se registra de forma diaria, utilizaríamos las vistas de la siguiente forma:
Vista materializada: Consultar datos del mes anterior.
Vista Volátil: Consultar datos actualizados del mes actual.

Las VISTAS sirven también cuando se desea compartir cierta información de una tabla con un grupo de usuarios que no debe ver todas las columnas, es decir, sobre la tabla original podría haber información sensible que no debe compartirse con todos.

Una vista en esencia es tomar una consulta convertirla en un solo nombre. De modo que SELECT * FROM view_name

Data Tree Gardener Aqui VOOOOOOOOY

Cuando se generan consultas se debe tener presente de no usar el comodín *, ya que esto le trae una carga adicional a la base de datos y más en tablas que son de muchas columnas.
El deber ser es traer solo los datos a usar, el comodín es útil cuando se utilizan funciones de agregación.
En conclusión, es muy mala practica hacerlo, en grandes sistemas esto pasa factura.

Comandos útiles:

  1. Para listar vistas materializadas usar: \dm
  2. Para listar vistas volátiles: \dv
  3. Para ver todo lo que hay tras una vista volátil en especifico \sv <nombre_vista>

    pd: no encontré el equivalente de ‘\sv’ para vistas materializadas, lo único que encontré fue una forma de preguntar usando SELECT, pero siendo así encuentro mucho más práctico usar PgAdmin.

esto nos va a ayudar tanto a escribir menos y optimizar las consultas ahora voy a revisar si a esas vistas se le pueden hacer joins

Entendido

CREATE OR REPLACE VIEW public.rango_view
 AS
 SELECT COALESCE(pasajero.nombre, 'Nombre en Null'::character varying) AS nombrenull,
    pasajero.id,
    pasajero.nombre,
    pasajero.direccion_residencia,
    pasajero.fecha_nacimiento,
        CASE
            WHEN pasajero.fecha_nacimiento > '2015-01-01'::date THEN 'Niño'::text
            ELSE 'Mayor'::text
        END AS tipo,
        CASE
            WHEN pasajero.nombre::text ~~* 'D%'::text THEN 'Empieza con D'::text
            ELSE 'No empieza con D'::text
        END AS letra,
        CASE
            WHEN date_part('years'::text, age(CURRENT_TIMESTAMP, pasajero.fecha_nacimiento::timestamp without time zone::timestamp with time zone)) >= 18::double precision THEN 'Mayor de edad.'::text
            ELSE 'Menor de edad.'::text
        END AS edad
   FROM pasajero;

ALTER TABLE public.rango_view
    OWNER TO postgres;

CREATE MATERIALIZED VIEW public.despues2014
AS
SELECT * FROM pasajero WHERE fecha_nacimiento > '2015-01-01'
WITH NO DATA;

ALTER TABLE public.despues2014
    OWNER TO postgres;

SELECT * FROM rango_view;
SELECT * FROM  public.despues2014;
REFRESH MATERIALIZED VIEW despues2014;
SELECT * FROM  public.despues2014;
DELETE FROM pasajero WHERE id = 89;
SELECT * FROM  public.despues2014;
REFRESH MATERIALIZED VIEW despues2014;
SELECT * FROM  public.despues2014;

Hay dos tipos de vistas: 1. Vistas Volátil, 2.Vistas Materializada: Persistentes

Apartir del video pasado ya no pude hacer los ejercicios, pgadmin me da muchas inconsistencias

Las vistas materializadas son útiles en muchos casos que requieren un acceso rápido a los datos. Las vistas materializadas se almacenan en caché y pueden ser el resultado de una consulta compleja y costosa. Una vez disponibles los datos en la vista las consultas son rápidas.
https://www.postgresqltutorial.com/postgresql-materialized-views/

Muy buena me gusto mucho esto de las vistas

La consulta del profesor no está bien diseñada lógicamente, teniendo en cuenta que si la fecha de nacimiento en mayor a 2015-01-01 deberían ser niños y no mayores, Quedó invertida la consulta.

Información resumida de esta clase
#EstudiantesDePlatzi

  • Una vista me permite agrupar algún código que necesite ejecutar continuamente en una palabra

  • La vista volátil me ayuda trayendo información reciente de la base de datos, es decir, información actualizada

  • La vista materializada hace la consulta y esta queda registrada en la memoria. Si vuelvo a consultar esta vista me traerá la información que esté en la memoria

  • Una buena práctica es usar vistas cuando sabes que la información ya no va a cambiar, esto ayuda al rendimiento de la base de datos

Las vistas son utilizadas cuando se requiere visualizar una consulta constantemente, en lugar de llamar toda la consulta cada vez que se la quiera revisar, solo se llama el nombre de la vista, en sí es convertir toda una consulta en un único nombre. Existen 2 tipos de vistas: * Vistas volátiles: Lo que guarda en el nuevo nombre de la vista, es el código de la consulta, entonces cada que se ejecuta la vista, lo que realmente hace es ejecutar el código guardado en la vista, es útil cuando la información constantemente está cambiando y se requiere ver los datos actualizados. * Vistas materializadas: Guarda en el nombre de la vista, la información de la consulta cuando fue creada la vista, esta es útil cuando se quiere guarda información para revisarla días posteriores, ya que mantienen la información del día de creación.

Una vista en PostgreSQL es una consulta guardada que se puede utilizar como una tabla virtual. Esencialmente, es una manera de almacenar una consulta en la base de datos para que pueda ser referenciada y utilizada más adelante.

  • Las vistas pueden simplificar consultas complejas, mejorar la seguridad restringiendo el acceso a ciertos conjuntos de datos y proporcionar una capa de abstracción sobre la estructura subyacente de la base de datos.

GENIAL…!

Me quedó claro lo del case en el video 20, pero si quisiera que el case tuviera un nombre en la consulta, como debo escribirlo en sql?

Siempre que hagamos un REFRESH en la vista materializada la vamos a actulizar con los datos del momento.

21. Vistas

  • Una vista es una consulta fijada.
  • Vista: Volátil. Se actualiza.
  • Vista Materializada: Persistente. No se actualiza. Solo para consultar información que no se va a cambiar.

Algo super interesante que comprobe es que puedes hacer INNER JOIN con una vista que en sí misma es un INNER JOIN, e imagino que se pueden hacer mas acciones.
Gran herramienta.

Vistas


En PostgreSQL, las vistas son objetos virtuales que proporcionan una representación simplificada y abstracta de los datos almacenados en una o varias tablas. Son similares a una tabla, pero en lugar de almacenar datos reales, solo proporcionan una vista de los datos existentes en otras tablas.

Las vistas se crean con una sentencia CREATE VIEW, y suelen utilizarse para simplificar la lógica de una consulta o para ocultar cierta información o detalles complejos de la estructura de datos subyacente.

Aquí hay un ejemplo de cómo crear una vista en PostgreSQL:

CREATE VIEW clientes_activos AS
  SELECT nombre, direccion, fecha_registro
  FROM clientes
  WHERE fecha_registro >= '2021-01-01'
  AND estado = 'activo';

En este ejemplo, se crea una vista llamada clientes_activos que muestra solo los nombres, direcciones y fechas de registro de los clientes cuyo estado es “activo” y cuya fecha de registro es igual o posterior a 2021-01-01.

Las vistas son muy útiles para simplificar la lógica de las consultas y para proteger la integridad de los datos al esconder los detalles de la estructura de datos subyacente. Sin embargo, es importante tener en cuenta que las vistas no son una solución para el rendimiento lento, ya que simplemente proporcionan una vista simplificada de los datos subyacentes y no realizan ningún tipo de optimización de rendimiento.

En PostgreSQL, existen dos tipos de vistas: materializadas y normales.

  • Las vistas materializadas son aquellas que almacenan los resultados de una consulta en una tabla temporal, lo que puede mejorar el rendimiento de las consultas futuras.
  • Las vistas normales, por otro lado, son simplemente una vista de los datos de una o más tablas subyacentes. No se almacenan los resultados de la consulta, por lo que cada vez que se accede a la vista se ejecuta una nueva consulta contra las tablas subyacentes.

VISTAS

Para no repetir la consulta varias veces, existen este tipo de alternativas llamadas “Vistas”, diferenciamos dos tipos

  • Vista: Volátil (Siempre que haga la consulta de la vista, la bd va a hacer la ejecución de la consulta, por lo cual siempre vas a traer información reciente. )
  • Vista Materializada: Persistente (solo hace la consulta 1 vez y luego queda almacenada en memoria, ósea que la siguiente vez que hagas la consulta, va a traer la de la memoria, esta vista es útil por ejemplo, si quieres consultar datos del día de ayer.)

las vistas en memoria estan buenas cuando la data que se consulta sigue mutando, las vistas materializadas sirven cuando la data a consultar no se volvera a modificar, no hace nuevas consultas, toma los datos guardados en disco = cte

Una vista es conveniente utilizarla cuando se tienen consultas que necesitan ser ejecutadas muchas veces durante le periodo de vida del proyecto, dicho de otra manera es poner esa consulta que se repite muchas veces y colocar un solo nombre. Existen 2 tipos de vistas:

-Vistas Volátiles: Siempre que se hace la consulta a la vista, la consulta de la información se realiza en tiempo real, es decir la información de dicha consulta será la más reciente.

-Vistas Materializadas: La consulta se realiza una sola vez a la BD y dicha información queda almacenada en memoria. Hay que tener cuidado con éste tipo de vistas porque podrían traer información que no esté actualizada a la fecha en que se realiza la consulta.

– Inspirado en un aporte de este mismo grupo.

– Haciendo la vista volátil.
CREATE OR REPLACE VIEW public.edad_tipo_view
AS
SELECT *,
CASE
WHEN fecha_nac < ‘1960-01-01’ THEN 'Mayor’
WHEN fecha_nac > ‘1959-12-31’ AND fecha_nac < ‘1996-01-01’ THEN 'Adulto’
WHEN fecha_nac > ‘1995-12-31’ THEN 'Joven’
END AS tipo
FROM pasajero ORDER BY tipo;
ALTER TABLE public.edad_tipo_view OWNER TO postgres;

– Demostrando la vista volátil recién hecha.
SELECT * FROM public.edad_tipo_view;

– Prueba para la vista materializada.
– Para aquellos (como yo) que usaron el ‘timestamp’ para
– los campos inicio y final, encontré dos formas de
– realizar la consulta. Aquí tienen la primera.
SELECT * FROM viaje WHERE to_char(inicio, ‘HH24:MI:SS’) > ‘22:00:00’;

– Y la segunda…
SELECT * FROM viaje WHERE inicio::time > ‘22:00:00’;

– Haciendo la vista materializada.
CREATE MATERIALIZED VIEW public.despues_noche_mview
AS
SELECT * FROM viaje WHERE to_char(inicio, ‘HH24:MI:SS’) > '22:00:00’
WITH NO DATA;
ALTER TABLE public.despues_noche_mview OWNER TO postgres;

– Demostrando la vista materializada recién hecha.
– (que dará un error de no estar poblada o llena)
SELECT * FROM despues_noche_mview;

– Para poblar la vista materializada procedemos a dar un refresh.
REFRESH MATERIALIZED VIEW despues_noche_mview;

– Y confirmamos que la información ‘vieja’ se mantiene en la
– vista materializada borrando una tupla de viaje cuando el
– id = 2, para observar que no se borró
DELETE FROM viaje WHERE id = 2;

– Usamos de nuevo la consulta para confirmar.
SELECT * FROM despues_noche_mview;

Otra super clase, donde aprendí algo super importante, la verdad vengo trabajando años con postgres pero nunca le di bola sus otras funcionalidades.

  • Vista volátil: Siempre va a traer la información actualizada cuando se haga uso de está.
  • Vista materializada: La consulta queda almacenada en memoria, guardando la información de la base de datos que había en ese momento, si la ejecuto en el futuro, va a traer info de la DB que puede estar desactualizada. Se aconseja que sea utilizada cuando se sabe que la información no va a cambiar.

Aquí les dejo los códigos de las vistas que hice:

volatil realicé la consultas de los pasajeros del día de hoy, como estos se pueden ir actualizando en el transcurso del día en el contexto que estamos es volátil.

SELECT pasajeros.id, pasajeros.nombre, viajes.inicio, viajes.fin 
FROM pasajeros
JOIN viajes 
ON viajes.id_pasajero = pasajeros.id
WHERE viajes.inicio::date = current_date;

Como vista materializada hice la consulta de los pasajeros que hayan realizado viajes en el año 2021, este siendo un año en el pasado no debería de cambiar.

SELECT pasajeros.id, pasajeros.nombre, viajes.inicio, viajes.fin 
FROM pasajeros
JOIN viajes 
ON viajes.id_pasajero = pasajeros.id
WHERE EXTRACT (YEAR FROM viajes.inicio) = 2021;

Entiendo que una vista materializada ayuda cuando una query es muy lenta o pesada y tienes que hacerla repetidas veces, entonces esto te ayuda a hacerlas más rápido.

Listo compañeros. 😃

Las vistas se usan para no repetir la misma consulta muchas veces. Nos ayuda a centralizar todos los esfuerzos en una sola función y con un solo nombre.

  • Vista volátil -> Se actualiza al mismo tiempo que la base de datos.
  • Vista materializada -> persistente. Tendrá datos antiguos aunque hayan sido borrados. Tenemos que actualizarla para que tenga datos nuevos si así lo queremos.

En mi caso, no me permitió ejecutar el query por que no estaba bien el formato de la hora, tuve que incluir un formato de “fecha y hora”

Vista: ejecuta por detrás una query y nos devuelve el resultado (donde la query puede acceder a tablas, otras vistas, utilizar funciones o procedimientos, etc.). Cada vez que accedemos a la vista, la query se ejecuta y nos devuelve la información que en ese momento exista en el origen.
Una Vista Materializada lo que hace es almacenar físicamente en caché el resultado de ejecutar una query en un determinado momento, de forma que cada vez que consultemos la Vista Materializada lo que vamos a recuperar es lo que había en el origen en el momento en el que se creó o se refrescó la VM.

OO muy importante saber esto.

Cuando ingreso a la ventana de creación de la vista no me aparece la pestaña “código”

En mi version de Postgres, es necesario colocar la vista Materializada entre comillas si no me arroja error

SELECT * FROM "VistaM";```

Tenga en cuenta que una vista no almacena datos físicamente, excepto una vista materializada .

Hay dos tipos de vistas:

Vistas: es un objeto de bd que es de una consulta almacenada. Se puede acceder a una vista como una tabla virtual en PostgreSQL. En otras palabras, una vista PostgreSQL es una tabla lógica que representa datos de una o más tablas subyacentes a través de una instrucción SELECT

--Vista Materializada con data
--¿Viajes hecho 2019-01-01-hasta 2019-01-31?
CREATE MATERIALIZED VIEW public.mview_viaje_2019_01_31
AS
SELECT * FROM viaje
WHERE  viaje.inicio >'2019-01-1' AND  viaje.inicio <'2019-01-31'
WITH DATA;

ALTER TABLE public.mview_viaje_2019_01_31
    OWNER TO postgres;


--Vista Materializada sin data
--¿Viajes hecho 2019-01-01-hasta 2019-01-31?
CREATE MATERIALIZED VIEW public.mview_viaje_2019_01_31
AS
--¿Viajes en el período 2019-01-1 hasta 2019-01-1?
SELECT * FROM viaje
WHERE  viaje.inicio >'2019-01-1' 
	AND  
	   viaje.inicio <'2019-01-31'

WITH NO DATA;

ALTER TABLE public.mview_viaje_2019_01_31
    OWNER TO postgres;

-- con esta instrucción refrescamos los datos para que se creen en la vista
REFRESH MATERIALIZED VIEW "mview_viaje_2019_01_31";

SELECT * FROM "mview_viaje_2019_01_31";

Algo se vio en los anteriores curso de mysql es que es bueno tener unas columnas que indique cuando se creó, actualizó y si está activa o no ya un Ejemplo de usar vista materializada es guardar un registro históricos de los cambios de las tuplas

╰(°▽°)╯

EXCELENTE ESTA CLASE

Vistas

Dos tipos de Vistas

Materialized Views en pgAdmin: Para crear una vista materializada.

Views en pgAdmin: Para crear una vista volátil.

REFRESH MATERIALIZED VIEW: Para actualizar los datos de la vista materializada.

Una gran ayuda para poder consultar despues jajaja, me encanta

Las vistas son el equivalente a los Procedimientos Almacenados en SQLServer?

Se que también hay vistas en MySQL, pero no estoy seguro de la existencia de las vistas materializadas.

Apa la papa, buen material.

Excelente.

Excelente para almacenar los cierres de mes fiscal y data por el estilo siempre y cuando se evite el REFRESH, a la final viene a sumar al stack de opciones que vamos incorporando al diseño en sus distintas fases