CodeGym /Cursos /SQL SELF /Trabajando con el tipo de dato JSONB

Trabajando con el tipo de dato JSONB

SQL SELF
Nivel 16 , Lección 1
Disponible

JSON (JavaScript Object Notation) es un formato de datos muy popular para intercambiar info entre sistemas. Es ligero, fácil de leer para humanos y perfecto para representar datos estructurados como objetos o arrays.

PostgreSQL soporta dos tipos de datos para trabajar con JSON:

  • JSON: guarda los datos como string. Es una representación puramente textual de JSON, sin optimización interna.
  • JSONB: representación binaria de JSON. Es más eficiente para leer, filtrar y procesar, porque PostgreSQL ya parsea el JSON y optimiza su almacenamiento.

¿Por qué se suele elegir JSONB? Porque:

  • Es más rápido para consultas gracias al almacenamiento binario.
  • Se puede indexar, lo que lo hace ideal para grandes volúmenes de datos.
  • Mantiene las claves ordenadas y elimina duplicados, lo que facilita el procesamiento.

Ejemplo de estructura JSON:

{
  "name": "Alice",
  "age": 25,
  "skills": ["SQL", "PostgreSQL", "JSONB"]
}

¿Por qué JSONB mola?

Almacenamiento de datos semiestructurados. En la vida real, los datos suelen venir como objetos complejos (por ejemplo, metadatos, configuraciones, perfiles de usuario). JSONB te deja guardarlos sin tener que crear cientos de tablas y relaciones.

Modelar datos que cambian. Cuando la estructura del objeto cambia a menudo (por ejemplo, se añaden o quitan campos), JSONB te permite guardar esos datos de forma flexible.

Trabajar con APIs. Muchas apps web mandan datos en formato JSON. En vez de transformar las peticiones, puedes guardarlas "tal cual" y trabajar con ellas directamente.

Crear una tabla con JSONB

¡Vamos a la práctica! Imagina que estamos creando una base de datos para guardar perfiles de usuario.

La columna profile va a guardar toda la info extra (por ejemplo, edad, intereses, contactos) en formato JSON. Esto es muy cómodo si la estructura de los datos varía de un usuario a otro.

id name - VARCHAR(100) profile - JSONB
1 Alice {"age": 25, "skills": ["SQL", "PostgreSQL", "JSONB"], "location": "New York"}
2 Bob {"age": 30, "interests": ["hiking", "photography"], "location": "Denver"}
3 Charlie {"email": "charlie@example.com", "verified": true}
4 Diana {"age": 22, "skills": ["Python"], "bio": "Data enthusiast", "location": "Berlin"}
5 Eve {"age": 28, "skills": [], "preferences": {"theme": "dark", "notifications": false}}

Los datos JSON se pueden insertar como strings. PostgreSQL los convierte automáticamente al formato JSONB.

Extraer datos de JSONB

Ahora que tenemos datos, veamos cómo sacarlos. PostgreSQL tiene un montón de operadores para trabajar con JSONB.

Acceder al valor de un campo

Usamos el operador -> para pillar el valor de un campo:

-- Mostrar la edad del usuario
SELECT profile->'age' AS age FROM users;

Convertir el valor a texto

El operador ->> te deja sacar el valor como string:

-- Mostrar la ubicación del usuario
SELECT profile->>'location' AS location FROM users;

Filtrar datos con JSONB

La potencia de JSONB se nota en las consultas con filtros. Podemos usar los operadores SQL de siempre para trabajar con JSON.

Ejemplo de filtro por clave:

-- Buscar usuarios que viven en "New York"
SELECT * FROM users
WHERE profile->>'location' = 'New York';

Buscar en un array

JSON soporta arrays, y PostgreSQL sabe buscar valores dentro de ellos:

-- Buscar usuarios que saben SQL
SELECT * FROM users
WHERE 'SQL' = ANY(jsonb_array_elements_text(profile->'skills'));

La función jsonb_array_elements_text convierte los elementos del array en strings para poder compararlos.

También hay una forma más corta usando el operador @>:

-- Buscar usuarios que saben SQL
SELECT * FROM users
WHERE profile->'skills' @> '["SQL"]';

Ya hablaremos más a fondo de funciones y formas de trabajar con JSON cuando toque :P

Resumen rápido: cuándo usar JSONB

JSONB es perfecto para:

  • Guardar estructuras de datos complejas.
  • Procesar datos de APIs externas.
  • Situaciones donde la estructura del objeto cambia.

Pero ojo, abusar de JSONB puede complicar la indexación y la gestión de la base de datos. Si la estructura de los datos es estable, mejor usa el modelo relacional.

2
Tarea
SQL SELF, nivel 16, lección 1
Bloqueada
Extracción de datos de JSONB
Extracción de datos de JSONB
2
Tarea
SQL SELF, nivel 16, lección 1
Bloqueada
Filtrado de datos usando JSONB
Filtrado de datos usando JSONB
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION