Cargando



PostgreSQL - Funciones Agregadas

En este tutorial estaremos viendo como construir y usar las funciones agregadas en PostgreSQL.


nov 12 2013 22:53
Profesional
nov 13 2013 19:34
Las funciones agregadas son un tipo de función muy útil en las Bases de Datos, a pesar que la mayoría maneja las funciones básicas de ANSI-SQL como MIN(), MAX(), AVG(), SUM(), COUNT().

En PostgreSQL tenemos la posibilidad de crear nuestras propias funciones agregadas de forma que podemos decir que PostgreSQL es una de las Bases de Datos más personalizables que hay en el mercado.

Al igual que con las funciones de otros tipos, las agregadas pueden ser escritas en otros lenguajes que sean soportados por PostgreSQL.

Construir una función Agregada

Como mencionamos al inicio podemos escribir las funciones agregadas en casi cualquier lenguaje, incluido el SQL, estas funciones están generalmente compuestas por una o más funciones, deben tener al menos una función de transición de estado para hacer el cómputo y funciones opcionales para manejar el estado inicial y el estado final, inclusive podemos usar lenguajes diferentes para cada una de estas funciones, por ejemplo la función a en PL/pgSQL y la función b en PL/Python, etc.

Veamos la estructura que debe seguir una función agregada:

CREATE AGGREGATE myagg(datatype_of_input)
(SFUNC=state_function_name, STYPE=state_type, FINALFUNC=final_func_name,
INITCOND=optional_init_state_value);

Donde la función final es opcional, sin embargo si la especificamos esta debe tomar como input o ingreso el resultado de la función de estado. Esta función de estado siempre toma como input el tipo de datos y el resultado de la última llamada de la función de estado; las funciones agregadas pueden ser multi-columnas también.

A pesar que las funciones que se puedan utilizar y crear son bastante simples, podemos ponernos creativos y realizar verdaderas obras de arte que llevan complejidad.

Vamos a realizar una función de media geométrica para demostrar la capacidad de PostgreSQL al momento de realizar funciones agregadas más complejas.

Para esta función que haremos utilizaremos dos funciones, una que será la función de estado que agregará los datos a un log y una final exponencial que convertirá los logs de nuevo.

Veamos en la siguiente imagen la función de estado:

pg_funcagre1.jpg


Esta función de transición de estado, recibe dos paramento el estado previo como un array unidimensional con dos elementos y también el siguiente elemento en el proceso de agregado, si el elemento es nulo o cero, la función de estado regresará al estado previo, de otra forma retornará un array donde el primer elemento es la suma logarítmica y el segundo es la cuenta actual.

En la siguiente función tomaremos la suma de la función de estado y la dividiremos por la cuenta:



pg_funcagre2.jpg


Ya que tenemos nuestras funciones que hacen todo el cálculo, vamos a unir ambas piezas para generar nuestra función agregada:




Como pudimos observar fue bastante sencilla la implementación de la función agregada, claro la lógica detrás de ella no lo es tanto, sin embargo de esta forma vemos lo completo que puede llegar a ser el soporte de PostgreSQL a estos niveles. Pudimos haber utilizado otros lenguajes sin problema.

Con esto terminamos este tutorial, ya tenemos un conocimiento más amplio sobre las funciones en PostgreSQL y de esta forma podemos extender nuestra base de datos a nuevos niveles que harán que nuestras aplicaciones sean mucho más robustas y funcionales.

¿Te ayudó este Tutorial?


Sin comentarios, sé el primero!

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X