Crear vistas en PostgreSQL


Hice una práctica interesante, de un momento a otro se me solicitó crear “algo” en PostgreSQL que brinde ciertos datos, la solicitud era:

Conectarse a un enlace y obtener una consulta que involucre diferentes tablas y la solución fue crear una vista.

Todo cliente de base de datos te da acceso a una sección SQL, allí podrás escribir los siguientes comandos:

  1. Crear la vista.
CREATE VIEW view_name AS 
SELECT 
    --
FROM  
    --
    JOIN  
        --
    JOIN  
        ;
  1. Crear un usuario que solo tenga acceso a la vista.
CREATE USER username LOGIN PASSWORD 'password';
  1. Dar permiso al usuario creado para que pueda acceder a la vista.
GRANT SELECT ON view_name TO username;

Y listo, ya cuentas con un usuario con acceso a la vista creada (view_name).

Desde el terminal: Si no tienes un cliente de base de datos puedes entrar al terminal, conectarte a la base de datos y trabajar.

$ psql postgres

postgres=# 

Mediante un usuario:

$ psql postgres -U username

postgres=# 

Conexión: Una vez allí, te conectas a la base de datos.

postgres=# \c database
You are now connected to database "database" as user "username".

Ahora ejecuta los comandos: Creación de vista, creación de usuario y revisa el resultado.

postgres=# SELECT * FROM view_name

Qué es una vista

Vamos con los conceptos.

Es directamente una consulta guardada con un nombre específico, también se conoce como tabla virtual que muestra un resultado. En otras palabras, no contienen datos, esta proporciona y presenta el resultado de la consulta previamente programada o definida.

¿Qué se debe tener en cuenta?

  1. Una vista regular permite nuevos campos al final (agregar nuevas columnas).
  2. Una vista materializada no permite edición.

Conceptos

Direfencia entre view y materialized view.

View

Es una consulta que guardamos con un nombre. La ejecutamos y esta regresa un resultado, al hacerlo los datos se recalculan y esto puede afectar el rendimiento cuando los datos son muy grandes o las consultas muy complejas.

CREATE VIEW view_name AS 
SELECT 
    --
FROM  
    --
    JOIN  
        --
    JOIN  
        ;

Materialized View

Este tema es interesante porque mantenemos el mismo concepto, pero el resultado se almacena físicamente y esto último beneficia en gran medida el rendimiento. Es decir, existe un calculo y se almacena, de ahí el nombre “materialized”. Por ello contamos con un comando de actualización o refrescamiento de la información.

CREATE MATERIALIZED VIEW view_name AS 
SELECT 
    --
FROM  
    --
    JOIN  
        --
    JOIN  
        ;

Puedes refrescar una vista materializada con el siguiente comando:

REFRESH MATERIALIZED VIEW view_name;