🧚 ¡Oye! Beekeeper Studio es una GUI de bases de datos rápida, moderna y de código abierto Descarga
24 de agosto de 2025 Por Matthew Rathbone

El tipo de dato JSONB de PostgreSQL facilita el manejo de datos JSON dentro de tu base de datos. Sus capacidades van más allá del simple almacenamiento: ofrece funciones avanzadas para manipular y consultar datos JSON a detalle. En esta guía exploraremos estas funciones JSONB con ejemplos prácticos para que aproveches todo el poder de PostgreSQL al gestionar datos JSON.

Para una visión más amplia de cómo trabajar con JSON en PostgreSQL, incluyendo los tipos json y jsonb, consulta nuestra guía completa de funciones JSON en PostgreSQL.

Introducción a JSONB

El tipo de dato jsonb en PostgreSQL es un formato binario que almacena datos JSON. Es muy eficiente y ofrece capacidades de indexación que json no tiene. En general, JSONB es preferible por su flexibilidad y sus ventajas de rendimiento.

Crear una tabla con JSONB

Empecemos creando una tabla que use el tipo de dato jsonb:

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    data JSONB
);

Insertar datos JSONB

Inserta datos JSONB usando la sintaxis JSON estándar. PostgreSQL valida y convierte automáticamente el JSON a formato binario:

INSERT INTO users (data) VALUES 
('{"name": "John Doe", "email": "john@example.com", "age": 30}'),
('{"name": "Jane Doe", "email": "jane@example.com", "age": 25}'),
('{"name": "Alice Smith", "email": "alice@example.com", "age": 28, "address": {"city": "New York", "state": "NY"}}');

Acceder a valores JSONB

PostgreSQL ofrece varios operadores para explorar los valores JSONB.

Extraer un objeto JSONB

Para acceder a valores JSONB anidados, usa los operadores -> y ->>. El operador -> devuelve datos en formato JSON, mientras que ->> devuelve texto.

SELECT data->'name' AS name, data->>'email' AS email FROM users;

Resultado esperado:

  name   |       email        
---------+--------------------
 "John Doe" | john@example.com
 "Jane Doe" | jane@example.com

Extraer valores JSONB anidados

Para estructuras JSON más profundas, encadena los operadores. El operador ? verifica primero que la clave exista:

SELECT 
    data->>'name' AS name,
    data->'address'->>'city' AS city 
FROM users 
WHERE data ? 'address';

Resultado esperado:

    name     |   city   
-------------|----------
 Alice Smith | New York

Funciones JSONB

PostgreSQL incluye un conjunto de funciones JSONB que van más allá de la simple extracción de valores.

Verificar si existe una clave

El operador ? verifica si una clave existe:

SELECT data ? 'age' AS has_age FROM users;

Resultado esperado:

 has_age 
---------
 t
 t
 t

Verificar contención

Usa el operador @> para verificar si un objeto JSON contiene a otro:

SELECT * FROM users WHERE data @> '{"age": 30}';

Resultado esperado:

 id |                    data                     
----+---------------------------------------------
  1 | {"name": "John Doe", "email": "john@example.com", "age": 30}

Concatenación de JSONB

Combina columnas o valores JSONB con el operador ||:

SELECT data || '{"verified": false}' AS updated_data FROM users;

Resultado esperado:

                            updated_data                            
-------------------------------------------------------------------
 {"age": 30, "name": "John Doe", "email": "john@example.com", "verified": false}
 {"age": 25, "name": "Jane Doe", "email": "jane@example.com", "verified": false}
 {"age": 28, "name": "Alice Smith", "email": "alice@example.com", "address": {"city": "New York", "state": "NY"}, "verified": false}

Eliminar una clave de JSONB

Elimina una clave con el operador -:

SELECT data - 'age' AS partial_data FROM users;

Resultado esperado:

                            partial_data                             
--------------------------------------------------------------------
 {"name": "John Doe", "email": "john@example.com"}
 {"name": "Jane Doe", "email": "jane@example.com"}
 {"name": "Alice Smith", "email": "alice@example.com", "address": {"city": "New York", "state": "NY"}}

Indexación de JSONB

Para mejorar el rendimiento de las consultas sobre datos JSONB, usa índices.

Crear un índice JSONB

Un índice GIN es ideal para tipos JSONB:

CREATE INDEX idx_users_data ON users USING GIN (data);

Este índice ayuda a acelerar operaciones como buscar la existencia de claves JSON o de pares clave-valor.

Funciones JSONB avanzadas

PostgreSQL ofrece funciones adicionales para operaciones más complejas:

-- Convert JSONB to key-value pairs
SELECT jsonb_each_text(data) FROM users LIMIT 1;

-- Get all keys from a JSONB object
SELECT jsonb_object_keys(data) FROM users LIMIT 1;

-- Update a nested value using jsonb_set
UPDATE users 
SET data = jsonb_set(data, '{address,zip}', '"10001"')
WHERE data ? 'address';

Conclusión

Las funciones JSONB de PostgreSQL ofrecen opciones potentes y flexibles para trabajar con datos JSON dentro de tu base de datos. Sus principales ventajas son:

  • Rendimiento: formato de almacenamiento binario con indexación eficiente
  • Operadores completos: extracción y manipulación sencillas con ->, ->>, @>, ?
  • Funciones avanzadas: operaciones complejas como jsonb_set, jsonb_each_text y jsonb_array_elements
  • Soporte de indexación: índices GIN para consultas rápidas

Estas capacidades hacen de PostgreSQL una excelente opción para aplicaciones que necesitan almacenar y consultar datos JSON semiestructurados junto con datos relacionales tradicionales. Al dominar estas funciones JSONB, podrás crear aplicaciones de bases de datos más flexibles y eficientes.

Beekeeper Studio es un cliente de bases de datos gratuito y de código abierto

La mejor herramienta de consultas y edición de SQL que he usado. Tiene todo lo que necesito para administrar mi base de datos. - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studio es rápido, intuitivo y fácil de usar. Es compatible con muchísimas bases de datos y funciona de maravilla en Windows, Mac y Linux.

La versión de Beekeeper para Linux tiene el 100% de las funciones, sin recortes ni concesiones.

Lo que dicen los usuarios de Beekeeper Studio

★★★★★
"Beekeeper Studio reemplazó por completo mi antiguo flujo de trabajo con SQL. Es rápido, intuitivo y hace que trabajar con bases de datos vuelva a ser agradable."
— Alex K., desarrollador de bases de datos
★★★★★
"He probado muchas GUI de bases de datos, pero Beekeeper logra el equilibrio perfecto entre funciones y simplicidad. Simplemente funciona."
— Sarah M., ingeniera full stack

¿Listo para mejorar tu flujo de trabajo con SQL?

download Descarga gratis