En la entrada para generar datos masivos con generate_series() se vieron varios ejemplos utilizando esta función con los tipos de datos que podemos insertar, tipos numéricos y tipos de fecha.
Nos ha llegado una consulta para rellenar una tabla con un data type text0 de forma masiva. veamos esa pregunta.
Hola Emilio, te saludo desde Perú. He visto tu sitio web, mencionando PostgreSQL. Estoy iniciando mis conocimientos y me preguntaba si me puedes apoyar con inserción masiva (50000 registros). Si tuviera un campo nombre, cada registro necesito que se incremente asi: nombre1, nombre2.. etc
Antes de resolver su duda, recordemos la sintaxis de la función generate_series()
Sintaxis de la función
Dentro de los paréntesis de la función generate_series(), tenemos que indicar dos o tres argumentos del tipo numérico o fecha. El primer parámetro indica el inicio de la serie, el segundo argumento indica el final de la serie y el tercer parámetro que es opcional, es el salto en la secuencia o intervalo en el caso de fechas.
La estructura de datos
Comencemos por crear la estructura para almacenar los valores que serán generados de manera masiva. Tal como nos pide nuestro amigo, vamos a crear una tabla que contenga una columna llamada nombre y del tipo varchar.
CREATE TABLE tabla_name(nombre varchar);
En este ejemplo vamos a incluir una segunda columna que sea apellido con el mismo tipo de dato, que también será rellenada de forma masiva con la función generate_series(). El código para crear la estructura con dos columnas es el siguiente:
CREATE TABLE name_table(name varchar, last_name varchar);
Si quieres aprender más sobre estructuras de datos en PostgreSQL, en el apartado de formación online tienes un curso de métodos avanzados para crear tablas.
Tenemos ya 28 cursos sobre PostgreSQL para que te conviertas en un especialista!!
Inserción y comprobación de datos
Para poder insertar un texto de forma masiva utilizando la función generate_series(), tenemos que concatenar la palabra que queremos almacenar con el número generado mediante la función.
El código para insertar de manera masiva unos 10 registros en nuestra tabla con el campo nombres es el siguiente:
INSERT INTO tabla_name(nombre) VALUES ('nombre'||generate_series(1,10));
Para comprobar que la inserción ha sido satisfactoria con los registros que deseamos, hacemos una consulta a nuestra tabla.
Para almacenar los 50000 registro que pide nuestro amigo en su consulta, tan solo tenemos que indicar tal número de filas en el segundo parámetro de la función generate_series(). Por lo tanto el código sería así:
INSERT INTO tabla_name(nombre) VALUES ('nombre'||generate_series(1,50000));
En este caso como son muchas más filas, vamos a sacar un conteo de todas las filas totales, para ello, utilizamos una función llamada count().
Ésta es la sentencia para averiguar el número total de registros almacenados en una tabla.
SELECT count(*) FROM tabla_name;
Siguiendo el ejemplo anterior donde nuestra estructura para los datos contiene dos columnas del tipo varchar, el campo name y el campo last_name. Vamos a realizar una inserción masiva de 1000000 filas en cada una de las dos columnas, utilizando la función generate_series().
El código de ésta sentencia de inserción es el siguiente:
INSERT INTO name_table(name, last_name) VALUES ('nombre'||generate_series(1,1000000), 'apellido'||generate_series(1,1000000));
Para saber que se han almacenado todas las filas deseadas, utilizamos la función count() y para ver que los registros tienen los datos correctos y tan solo mostrar 10 filas de los 1000000 registros insertados, utilizamos una cláusula llamada LIMIT.
Además como podéis observar en la imagen, la inserción ha tardado unos 5 segundo, dado que estamos utilizando una máquina virtual pequeña y el servidor PostgreSQL no está optimizado.