Volver al blog

Cómo crear una View en PostgreSQL

Una View es una forma de proteger tus tablas SQL y de formatear los datos crudos de tu tabla en información útil que puede ser consultada por las personas de tu organización.

PostgreSQL logo

¿Qué es una View?

Técnicamente, una view es una pseudo-tabla, lo que significa que no es en realidad (o no necesariamente) una tabla en sí misma. Es solo una forma de cargar los datos de tus tablas de una manera útil. Una view puede tener todas las columnas de una tabla, una consulta que combina distintas tablas, o algunas columnas particulares de una tabla, esto va a depender de lo que quieras o necesites mostrar en la view en sí.

Creando una View en PostgreSQL

Ahora, vayamos directo al grano y empecemos a crear nuestra primera View en PostgreSQL:

CREATE OR REPLACE VIEW users_v AS
SELECT * FROM users;

¡Bien, eso es todo! Ya creaste tu primera view en PostgreSQL. Bastante fácil, ¿no? Ahora profundicemos un poco más

Creando una View en PostgreSQL con una sentencia JOIN

Como dijimos antes, una VIEW no es necesariamente una tabla, también puede ser una combinación de tablas

CREATE OR REPLACE VIEW users_points_v AS
SELECT a.user_id, SUM(b.user_points) as user_points
FROM users a
LEFT JOIN users_points b
ON a.users_id = b.users_id
GROUP BY 1

Suponiendo que tenemos una tabla llamada users con la información de los usuarios y otra tabla llamada users_points con los users_points (y la clave foránea users_id), esta consulta va a sumar todos los user_points y mostrarlos en esta view…

¿Cómo consulto mi View?

Esto es en realidad muy simple, consultar una View es exactamente lo mismo que consultar una tabla. ¿Y cómo llamamos a los valores? Con el mismo nombre que definimos.

SELECT * FROM users_points_v WHERE user_id BETWEEN 1 and 10 AND user_points > 10;

¿Cómo elimino mi view?

También muy simple, solo necesitamos hacer un DROP de la View.

DROP VIEW users_points_v;

¿Cómo modifico mi view?

Antes que nada, es importante que sepas que esto va a depender de tus permisos en PostgreSQL, normalmente, un usuario simple no va a tener acceso para eliminar las views, y dependiendo del tamaño de tu organización, también vas a tener solo acceso de lectura a las views corporativas y ningún acceso a las tablas corporativas.

Como vimos antes, estoy usando el comando CREATE OR REPLACE View, esto significa que si la View ya está creada, va a ser reemplazada por la nueva view.

CREATE OR REPLACE VIEW users_v AS
SELECT * FROM users;

Cómo ver cómo fue creada mi View

A veces necesitamos saber cómo fue creada la view, en este caso, podemos usar el comando SHOW que va a especificar cómo fue generada nuestra view.

SHOW VIEW users_points_v;

El comando WITH en las VIEWs

Bien, esto es un poco complicado pero digamos que querés definir múltiples subconsultas en una view, la mejor forma de hacer esto es usando el comando WITH. También podríamos usar subconsultas, pero de esta forma queda más organizado y prolijo. (Por cierto, el comando WITH es una sentencia que se usa solo en algunos motores SQL, esto no va a funcionar en todas las Views SQL)

CREATE OR REPLACE VIEW user_points_by_date_v
SELECT * FROM
(
WITH points AS (
SELECT user_id, points_date, SUM(user_points) AS points  FROM users_points
GROUP BY 1,2
),
gregorian_dates_vals AS (
SELECT not_gregorian_date, gregorian_date_conversion as gregorian_date FROM gregorian_dates
)
SELECT user_id, greg.gregorian_date, p.points FROM
users a
LEFT JOIN points p
ON a.user_id=p.user_id
LEFT JOIN gregorian_dates_vals greg
ON p.points_date = greg.not_gregorian_date
) WITH NO SCHEMA BINDING;

Bien, esta última fue complicada… Acá lo que hacemos es generar dos “sub-tablas” con el comando WITH, una se llama points y la otra gregorian_dates_vals y después, por último, creamos una consulta que va a unir estas subtablas con nuestra tabla principal, que es users.

Por último, estamos referenciando WITH NO SCHEMA BINDING, esto significa que en caso de que una de las tablas no exista, la view va a existir de todas formas (pero en este caso en particular, como todo depende de todo, probablemente venga con valores nulos)

Conclusión

Vimos acá cómo crear views en PostgreSQL. Es realmente muy interesante y tiene mucho potencial. Las views se vuelven cada vez más útiles a medida que tu organización crece y necesita mejores formas de proteger la información con permisos de usuario.

Si sos nuevo en PostgreSQL te recomendaría crear tu propio entorno de pruebas.

Ya nos metimos en los fundamentos de crear una View pero Acá tenés más información sobre views y sus distintas variables.

Read in English