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 52

Preguntas 10

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

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 鈥渞efresh鈥 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;

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.

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

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;

Data Tree Gardener Aqui VOOOOOOOOY

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

  • 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>

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

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

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;

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.

Cuando cre茅 la tabla viaje, lo hice con campos TIMESTAMP WITH TIME, entonces no me permit铆a filtrar los datos por horas lo que hice fue esto:

les dejo aqu铆 documentaci贸n al respecto

SELECT *
from viaje
where DATE_PART('hour', inicio) > 22;

Muy buena me gusto mucho esto de las vistas

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.

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/

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.

Listo compa帽eros. 馃槂

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.

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.

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?

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 鈥渇echa 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 鈥渃贸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