Tipo JSONB
¿Qué es JSONB en PostgreSQL y en qué se diferencia de JSON?
jsonb almacena JSON en un formato binario descompuesto que es rápido de consultar y se puede indexar. Es el tipo JSON que la mayoría de las aplicaciones deberían usar.
PostgreSQL tiene dos tipos JSON. json almacena una copia exacta del texto de entrada, mientras que jsonb almacena una forma binaria descompuesta: un poco más lenta de escribir por la conversión, pero bastante más rápida de procesar, y admite indexación.
jsonb no conserva los espacios en blanco, el orden de las claves ni las claves duplicadas; si una clave aparece dos veces, solo se conserva el último valor. Usa -> para obtener un valor JSON, ->> para obtener texto y @> para comprobar si un documento contiene a otro. Un índice GIN en una columna jsonb acelera las consultas de contención y de existencia de claves.
Ejemplo
El ejemplo usa el operador @> para encontrar el perfil cuya ciudad es Osaka y muestra con formato legible el documento de otro perfil.
CREATE TABLE profiles (id int PRIMARY KEY, data jsonb NOT NULL);
INSERT INTO profiles VALUES
(1, '{"name": "Ana", "city": "Lisbon", "tags": ["admin"]}'),
(2, '{"name": "Ben", "city": "Osaka"}');
SELECT data->>'name' AS name FROM profiles WHERE data @> '{"city": "Osaka"}';
SELECT jsonb_pretty(data) FROM profiles WHERE id = 1;SQL simple para PostgreSQL 16 o 17 estándar, sin extensiones. Ejecútalo en una base de datos vacía que puedas descartar.
Fuentes
Documentación oficial de PostgreSQL (en inglés).