Seguro que ya has oído hablar de los arrays más de una vez. En diferentes lenguajes de programación significan casi lo mismo. Pero hay matices.
Un array en PostgreSQL es un tipo de dato que te permite guardar un conjunto de valores del mismo tipo en una sola columna de una tabla. Es como si en vez de guardar un solo dato, metieras toda una "caja" de datos en una celda. Puede ser una lista de números, strings, fechas o incluso objetos más complejos.
Si hablamos en abstracto, un array se puede comparar con una caja de herramientas. En vez de llevar todas las llaves en la mano (cada llave como una columna/fila separada), las metes en una maleta cómoda (una columna que contiene un array).
Dos formas de crear arrays
En PostgreSQL hay dos sintaxis principales para crear arrays. Es como dos formas diferentes de hacer la maleta: el resultado es el mismo, pero el enfoque cambia:
- Sintaxis con llaves
{}
Es la forma más compacta y usada:
-- Array de strings
'{"manzana", "plátano", "cereza"}'
-- Array de números
'{1, 2, 3, 4, 5}'
-- Array de fechas
'{"2023-01-01", "2023-01-02", "2023-01-03"}'
- Sintaxis con el constructor
ARRAY[]
Una forma más explícita y legible:
-- Array de strings
ARRAY['manzana', 'plátano', 'cereza']
-- Array de números
ARRAY[1, 2, 3, 4, 5]
-- Array de fechas
ARRAY['2023-01-01'::DATE, '2023-01-02'::DATE, '2023-01-03'::DATE]
¡Ambas sintaxis funcionan igual! La elección depende de tus preferencias y del contexto. Es como elegir entre los bucles for y while en otros lenguajes de programación: funcionalmente son equivalentes, pero uno puede ser más cómodo en una situación concreta.
Cuándo usar arrays
Los arrays son el superpoder de PostgreSQL para resolver tareas donde no tiene sentido crear tablas o columnas adicionales. Son perfectos para:
- Guardar listas, tags o categorías
Imagina que estamos creando una base de datos para una tienda online. Cada producto puede tener varios tags, por ejemplo:
- Para una camiseta, los tags pueden ser:
["ropa", "hombre", "deporte"]. - Para unos auriculares:
["electrónica", "inalámbricos", "gadgets"].
Con arrays puedes guardar estos tags en una sola columna sin tener que crear una tabla aparte para los tags, ahorrando espacio y simplificando la estructura de los datos.
-- Tabla de productos con array de tags
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
tags TEXT[] -- Array de strings para los tags
);
-- Ejemplo de datos
INSERT INTO products (name, tags)
VALUES
('Camiseta', ARRAY['ropa', 'hombre', 'deporte']),
('Auriculares', ARRAY['electrónica', 'inalámbricos', 'gadgets']);
- Guardar la lista de pedidos
Si trabajas con pedidos, un array puede ayudarte a guardar la lista de productos en un solo pedido:
-- Tabla de pedidos con array de IDs de productos
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
customer_name TEXT,
product_ids INTEGER[] -- Array de identificadores de productos
);
-- Ejemplo de datos
INSERT INTO orders (customer_name, product_ids)
VALUES
('Ana', ARRAY[1, 2, 3]),
('Otto', ARRAY[4, 5]);
Ahora, cada pedido tiene la lista de productos que se compraron. Cómodo, ¿verdad?
Configuraciones y ajustes simples
Cuando necesitas guardar listas simples de ajustes o preferencias de usuario:
CREATE TABLE user_preferences ( user_id INTEGER PRIMARY KEY, notification_types TEXT[], allowed_days INTEGER[] -- días de la semana: 1-7 );
Comparación de arrays con otros tipos de datos
Aquí es importante entender que los arrays son simplemente otra herramienta en el arsenal de PostgreSQL, y no sirven para todo. Por ejemplo, una alternativa a los arrays puede ser usar una tabla de relaciones (relación "muchos a muchos") o el tipo de dato JSON/JSONB.
Arrays vs JSONB
Los arrays son cómodos cuando sabes que vas a guardar varios valores del mismo tipo. Son más simples, rápidos y ocupan menos espacio.
JSONB es mejor para estructuras más complejas, por ejemplo, si necesitas guardar objetos con una estructura flexible. Pero JSONB puede ser más complicado de manejar.
Ejemplo de array y JSONB para el mismo conjunto de datos:
-- Array
ARRAY['ropa', 'hombre', 'deporte']
-- JSONB
'["ropa", "hombre", "deporte"]'::JSONB
Si necesitas hacer cosas como ordenar, filtrar o indexar a menudo, los arrays serán la mejor opción.
Ejemplo de uso de arrays en tareas reales
Vamos a ver una situación: estás desarrollando una app para el control de asistencia en la universidad. Cada clase tiene una lista de estudiantes que asistieron, pero no necesitas crear una tabla aparte para relacionar estudiantes y clases. En vez de eso, puedes usar arrays:
-- Tabla de clases con array de estudiantes
CREATE TABLE lectures (
id SERIAL PRIMARY KEY,
topic TEXT NOT NULL,
students INTEGER[] -- Array de identificadores de estudiantes
);
-- Ejemplo de datos
INSERT INTO lectures (topic, students)
VALUES
('Bases de datos', ARRAY[101, 102, 103]),
('Algoritmos', ARRAY[104, 105]);
Ahora puedes consultar fácilmente la lista de estudiantes de cualquier clase, y también añadir o quitar estudiantes del array.
Cosas importantes al usar arrays en PostgreSQL
- El tipo de dato dentro del array debe ser homogéneo. PostgreSQL no permite mezclar, por ejemplo, strings y números en el mismo array.
-- Funciona
ARRAY[1, 2, 3] -- Array de números
-- Error: mezcla de strings y números
ARRAY['manzana', 42, 'cereza']
- La indexación de los elementos del array empieza en 1, no en 0. No lo olvides si vienes de lenguajes donde los arrays empiezan en 0 (Python, JavaScript, C++ y otros).
- Soporte de NULL: los arrays pueden contener valores NULL
- Multidimensionalidad: PostgreSQL soporta arrays multidimensionales
GO TO FULL VERSION