Views
Como la mayoría de bases de datos relacionales, PostgreSQL tiene soporte para las vistas, sin embargo a diferencia de SQL Server y MySQL, las vistas en PostgreSQL no son actualizables automáticamente sin no que hay que recurrir al uso de Triggers del tipo INSTEAD OF, de esta forma con el uso de TRIGGERS se adapta y es más cercano al estándar.
La ventaja de esto es que nos permite mantener un control mayor sobre las vistas y en la forma en que las tablas que proveen la información van a ser actualizadas.
Veamos en la siguiente imagen un ejemplo de cómo crear una vista en PostgreSQL utilizando sus características especiales:
Expliquemos los puntos numerados de la imagen ejemplo para que podamos tener un acercamiento al tema.
- Maneja el borrado con la instrucción DELETE, solo borra el registro que corresponde con la misma llave del viejo registro.
- Maneja las inserciones de datos.
- Solo actualiza si al menos una de las columnas de la tabla facts fue cambiada.
- Maneja las actualizaciones, utiliza el registro OLD o viejo para determinar que registros borrar o actualizar con la data del registro NEW o nuevo.
CREATE TRIGGER trip_01_vw_facts_ins_upd_del INSTEAD OF INSERT OR UPDATE OR DELETE ON census.vw_facts FOR EACH ROW EXECUTE PROCEDURE census.trig_vw_facts_ins_upd_del();
De esta forma cuando hacemos alguna inserción o modificación o borrado sobre nuestra vista, las tablas que la conforman recibirán los datos, veamos un query de ejemplo:
UPDATE census.vw_facts SET yr = 2012 WHERE yr = 2011 AND tract_id = '25027761200';
Lo que nos daría un resultado exitoso: Query returned successfully: 51 rows affected, 21 ms execution time.
Window
Las ventanas son una característica estándar ANSI-SQL soportada por PostgreSQL, esta nos permite ver y utilizar los datos que están más allá del registro actual, sin estas funciones tendríamos que estar realizado JOINS y Sub-Querys para poder obtener los datos y recursos de otra forma mucho más compleja.
El siguiente ejemplo consiste en obtener el valor average de una columna en una tabla veamos el ejemplo en la siguiente imagen:
Como pudimos observar con la función AVG nos permite obtener los valores de todos los campos sin necesidad de hacer JOINS y la función OVER nos permite convertir esto en una función Window. Así cuando PostgreSQL ve una función de este tipo va a hacer una escaneo de todas las filas que cumplan con la cláusula WHERE para obtener el resultado.
Con esto terminamos el tutorial con el que pudimos conocer un poco más como PostgreSQL maneja las funciones estándar de ANSI-SQL además de ver como agrega su propio estilo para extender la utilidad de dichas funciones.