Trabajar con arrays no se limita solo a crearlos y guardarlos — muchas veces necesitas sacar elementos individuales o analizar su contenido. PostgreSQL trae varias funciones integradas para estas operaciones. Vamos a verlas una por una.
Función unnest(): desempaquetando un array
La función unnest() literalmente desempaqueta un array, convirtiendo sus elementos en filas separadas. Esto es súper útil si necesitas trabajar con los datos del array como si fueran una tabla.
Ejemplo 1: Desempaquetando un array simple
Supón que tienes un array con nombres de facultades:
SELECT ARRAY['Informática', 'Matemáticas', 'Física'] AS facultades;
Ahora queremos sacar cada elemento como una fila aparte. Usamos unnest():
SELECT unnest(ARRAY['Informática', 'Matemáticas', 'Física']) AS facultad;
Resultado:
| facultad |
|---|
| Informática |
| Matemáticas |
| Física |
Ejemplo 2: Desempaquetando un array en una tabla
Supón que tienes una tabla courses:
CREATE TABLE courses (
course_id SERIAL PRIMARY KEY,
course_name TEXT,
tags TEXT[]
);
INSERT INTO courses (course_name, tags)
VALUES
('Algoritmos', ARRAY['Programación', 'Informática']),
('Álgebra lineal', ARRAY['Matemáticas', 'Álgebra']),
('Física básica', ARRAY['Física', 'General']);
Ahora sacamos todos los tags del array:
SELECT course_name, unnest(tags) AS tag
FROM courses;
Resultado:
| course_name | tag |
|---|---|
| Algoritmos | Programación |
| Algoritmos | Informática |
| Álgebra lineal | Matemáticas |
| Álgebra lineal | Álgebra |
| Física básica | Física |
| Física básica | General |
Como ves, cada elemento del array se convierte en una fila de la tabla.
Función array_length(): saber el tamaño de un array
Otra función clave para arrays es array_length(). Devuelve la longitud del array (o sea, cuántos elementos tiene) para la dimensión que le digas.
Ejemplo 1: Número de elementos en un array unidimensional
Tomemos un array:
SELECT ARRAY['Manzana', 'Plátano', 'Naranja'] AS frutas;
Si quieres saber cuántas frutas hay en el array:
SELECT array_length(ARRAY['Manzana', 'Plátano', 'Naranja'], 1) AS longitud;
Resultado:
| longitud |
|---|
| 3 |
Aquí el 1 indica la dimensión del array. Los arrays en PostgreSQL pueden tener varias dimensiones (por ejemplo, arrays bidimensionales), pero eso lo dejamos para otro momento.
Ejemplo 2: Número de elementos en un array de una tabla
Veamos cuántos tags tiene cada curso:
SELECT course_name, array_length(tags, 1) AS cantidad_tags
FROM courses;
Resultado:
| course_name | cantidad_tags |
|---|---|
| Algoritmos | 2 |
| Álgebra lineal | 2 |
| Física básica | 2 |
La función simplemente te dice: “¡Oye, aquí hay dos elementos!”, y eso ya te facilita mucho el análisis de datos.
Función array_position(): buscar un valor en un array
Ahora imagina que buscas un elemento concreto en un array. La función array_position() te salva: devuelve la posición de la primera vez que aparece ese elemento.
Ejemplo 1: Buscar un elemento
Supón que tienes este array:
SELECT ARRAY['Rojo', 'Azul', 'Verde', 'Amarillo'] AS colores;
Vamos a buscar la posición del elemento "Azul":
SELECT array_position(ARRAY['Rojo', 'Azul', 'Verde', 'Amarillo'], 'Azul') AS posicion;
Resultado:
| posicion |
|---|
| 2 |
Si el elemento no está, la función devuelve NULL. Vamos a probarlo:
SELECT array_position(ARRAY['Rojo', 'Azul', 'Verde', 'Amarillo'], 'Negro') AS posicion;
Resultado:
| posicion |
|---|
| NULL |
Ejemplo 2: Buscar en un array de una tabla
Quieres saber qué curso tiene el tag "Informática". Primero buscamos las filas necesarias:
SELECT course_name, array_position(tags, 'Informática') AS posicion
FROM courses;
Resultado:
| course_name | posicion |
|---|---|
| Algoritmos | 2 |
| Álgebra lineal | NULL |
| Física básica | NULL |
Ahora añade un filtro para dejar solo las filas donde el tag existe:
SELECT course_name
FROM courses
WHERE array_position(tags, 'Informática') IS NOT NULL;
Resultado:
| course_name |
|---|
| Algoritmos |
La función array_position() te permite encontrar datos dentro de un array rápido, por eso es una de las más importantes para trabajar con arrays en PostgreSQL.
Aplicaciones prácticas de las funciones
unnest()— úsala para convertir arrays en filas. Es clave para analizar datos, hacer informes y trabajar con tags.array_length()— ideal para comprobar la longitud de los arrays. Por ejemplo, puedes usarla para validar datos: asegurarte de que el array no esté vacío.array_position()— una herramienta genial para buscar elementos, ya sean categorías de productos, participación de estudiantes en proyectos o palabras clave en descripciones.
Errores típicos al usar estas funciones
unnest()puede duplicar el número de filas si la usas en arrays de varias columnas a la vez. Esto se arregla fácil conJOIN LATERALoCROSS JOIN, pero ojo con eso.array_length()devuelveNULLpara un array vacío. Si tu array puede estar vacío, compruébalo aparte.array_position()puede devolverNULLsi el elemento no está. Así que mejor siempre tenlo en cuenta en los filtros (IS NOT NULL).
Ejemplos de la vida real
Los arrays en PostgreSQL no son solo teoría, son una herramienta que va de lujo en proyectos reales. Por ejemplo, si tienes un blog y cada artículo tiene una lista de tags — el array te deja filtrar artículos por tema o incluso hacer un top de categorías populares.
O imagina que analizas el comportamiento de usuarios que eligen varios cursos o productos. Todas esas preferencias se guardan fácil en un array — y también se procesan fácil.
Y además los arrays ayudan a validar datos: con array_length() puedes, por ejemplo, limitar el número de elementos — para que un usuario no elija más de cinco opciones.
GO TO FULL VERSION