Añadir Columnas de Array a Tabla Existente
En este paso, aprenderá a añadir y manipular columnas de array en PostgreSQL. Ampliaremos nuestra tabla products existente añadiendo una columna de array para almacenar etiquetas (tags). Las columnas de array le permiten almacenar múltiples valores del mismo tipo de dato en una sola columna, lo cual es útil para almacenar listas de elementos como etiquetas, categorías o características.
Dado que ya estamos conectados a la base de datos y tenemos nuestra tabla products del paso anterior, añadamos columnas de array a nuestra tabla existente:
ALTER TABLE products ADD COLUMN name VARCHAR(255);
ALTER TABLE products ADD COLUMN tags TEXT[];
Estos comandos añaden dos nuevas columnas a nuestra tabla products existente: name (una cadena de texto) y tags (un array de cadenas de texto). El tipo de dato TEXT[] especifica que la columna tags es un array de valores de texto.
Debería ver una salida similar a esta para cada comando ALTER:
ALTER TABLE
Ahora, actualicemos nuestros datos existentes e insertemos nuevos datos con las nuevas columnas:
UPDATE products SET name = data ->> 'name' WHERE id = 1;
UPDATE products SET name = data ->> 'name' WHERE id = 2;
UPDATE products SET tags = ARRAY['electronics', 'computers', 'portable'] WHERE id = 1;
UPDATE products SET tags = ARRAY['electronics', 'accessories', 'input'] WHERE id = 2;
Estos comandos actualizan nuestros productos existentes con información de nombre y etiquetas extraída de los datos JSONB y nuevos valores de array.
Debería ver una salida similar a esta para cada actualización:
UPDATE 1
Para consultar los datos del array, puede utilizar la indexación de arrays. Los índices de array en PostgreSQL comienzan en 1.
Por ejemplo, para recuperar la primera etiqueta del primer producto, puede utilizar la siguiente consulta:
SELECT tags[1] FROM products WHERE id = 1;
Este comando selecciona el elemento en el índice 1 del array tags de la tabla products, donde el id es 1.
Debería ver una salida similar a esta:
tags
-----------
electronics
(1 row)
También puede utilizar la función UNNEST para expandir un array en un conjunto de filas.
Por ejemplo, para recuperar todas las etiquetas de todos los productos, puede utilizar la siguiente consulta:
SELECT name, UNNEST(tags) AS tag FROM products;
Este comando selecciona el name y cada tag individual del array tags, creando una nueva fila por cada etiqueta.
Debería ver una salida similar a esta:
name | tag
---------+-------------
Laptop | electronics
Laptop | computers
Laptop | portable
Keyboard| electronics
Keyboard| accessories
Keyboard| input
(6 rows)
Puede utilizar el operador @> para comprobar si un array contiene un valor específico.
Por ejemplo, para encontrar todos los productos con la etiqueta 'electronics', puede utilizar la siguiente consulta:
SELECT name FROM products WHERE tags @> ARRAY['electronics'];
Este comando selecciona el nombre de todas las filas de la tabla products donde el array tags contiene el valor 'electronics'.
Debería ver una salida similar a esta:
name
----------
Laptop
Keyboard
(2 rows)
También puede utilizar el operador && para comprobar si dos arrays tienen algún elemento en común.
Por ejemplo, para encontrar todos los productos que comparten alguna etiqueta con el primer producto, puede utilizar la siguiente consulta:
SELECT p2.name FROM products p1, products p2 WHERE p1.id = 1 AND p1.tags && p2.tags AND p2.id != 1;
Este comando selecciona el nombre de todas las filas de la tabla products (con alias p2) que tienen al menos una etiqueta en común con las etiquetas del primer producto (con alias p1), excluyendo el primer producto en sí.
Debería ver una salida similar a esta:
name
----------
Keyboard
(1 row)
¡Perfecto! Hemos añadido con éxito columnas de array a nuestra tabla existente y hemos aprendido a trabajar con arrays. Nuestra tabla products ahora contiene tipos de datos JSONB y de array, lo que la prepara para el siguiente paso.