En nuestra entrada semanal hablaremos de una función que nos servirá para realizar varios testeos a la hora de trabajar en nuestra Base de Datos. En muchas ocasiones necesitamos rellenar una tabla con muchos datos, con fines de prueba. Esto se realiza para planificar la escalabilidad vertical de las tablas en un futuro, y así poder optimizar las consultas.
Desde los inicios de PostgreSQL, disponemos de una función que nos genera una serie de datos para “engordar” una tabla. Con la función generate_series() actualmente podemos insertar datos del tipo int, bigint, numeric, timestamp o timestamp with time zone (timestamptz) en una tabla para así aumentar el tamaño de la misma.
Su sintaxis
La sintaxis de la función generate_series() es muy sencilla, tan solo tenemos que indicar dos o tres parámetros. El primer parámetro es el comienzo de la serie, el segundo es el final de la serie y el tercer parámetro es el salto en la secuencia o intervalo en el caso de fechas. Para llamar a esta función utilizamos la sentencia SELECT. A continuación os dejo el código de su sintaxis.
SELECT generate_series(comienzo, final, salto);
Ejemplos con generate_series()
En el siguiente ejemplo mostramos una serie que comienza desde el número cinco hasta el número uno y el salto será retrocediendo de dos en dos. La sintaxis y el resultado de la ejecución de la función generate_series con estos parámetros:
SELECT generate_series(5, 1, -2);
En este ejemplo utilizamos decimales (tipo numeric) para el comienzo de la serie y para el salto, el final de la serie es un tipo entero (int). El código con el resultado de incluir estos parámetros es el siguiente:
SELECT generate_series(1.1, 5, 1.2);
Utilizando la función generate_series con fechas, en este caso sacamos una serie entre el día 23 y el día 25 en un intervalo de 10 horas. En el ejemplo que mostramos creamos una serie de fecha y hora con la zona horaria (tipo timestamptz). Como podéis observar debemos para las fechas debemos de indicar explicitamente el tipo de dato.
SELECT generate_series('2018-03-23 00:00'::timestamptz, '2018-03-25 12:00', '10 hours');
En este ejemplo vamos a insertar 15 tuplas de fecha sin la zona horaria en una tabla que el tipo de dato es timestamptz. Las filas insertadas son desde el día uno hasta el día 30 de marzo con un salto de dos días. A continuación os dejo el código de la sentencia y observamos que su resultado las fechas incluye la zona horaria.
Como véis, estamos ante una función muy útil. Como hemos mencionado anteriormente, se trata de una de las funciones más utilizadas a la hora de realizar pruebas de cara a introducir datos en una tabla.