Saltar al contenido principal
PostgreSQL
20 min de lectura

JSONB

Trabaja con datos JSON de forma eficiente

JSONB permite almacenar y consultar datos JSON de forma eficiente en PostgreSQL.

Ventajas de JSONB

  • Almacenamiento binario optimizado
  • Indexación GIN para búsquedas rápidas
  • Operadores específicos para consultas
  • Tabla con JSONB

    sql
    1CREATE TABLE productos (2    id SERIAL PRIMARY KEY,3    nombre TEXT NOT NULL,4    metadata JSONB5);6 7INSERT INTO productos (nombre, metadata) VALUES8('Laptop', '{"marca": "Dell", "ram": 16, "color": "gris", "puertos": ["USB-C", "HDMI"]}');

    Operadores JSONB

    sql
    1-- Acceder a campo2SELECT metadata->'marca' as marca FROM productos;3SELECT metadata->>'marca' as marca_texto FROM productos;4 5-- ¿Contiene clave?6SELECT * FROM productos WHERE metadata ? 'color';7 8-- ¿Contiene valor?9SELECT * FROM productos WHERE metadata @> '{"ram": 16}';10 11-- ¿Tiene alguna clave del array?12SELECT * FROM productos WHERE metadata ?| ARRAY['marca', 'color'];

    Índice GIN en JSONB

    sql
    1CREATE INDEX idx_productos_metadata ON productos USING GIN (metadata);

    Actualizar campos JSONB

    sql
    1-- Agregar campo2UPDATE productos 3SET metadata = metadata || '{"stock": 10}'::jsonb4WHERE id = 1;5 6-- Eliminar campo7UPDATE productos 8SET metadata = metadata - 'color'9WHERE id = 1;

    Sintaxis

    Sintaxis
    sql
    1columna JSONB

    Ejemplos

    Consultar JSONB

    Buscar productos por características

    Ejemplo
    sql
    1SELECT nombre, metadata->>'marca' as marca2FROM productos3WHERE metadata @> '{"ram": 16}'4AND metadata->>'marca' = 'Dell';

    Resultado:

    | nombre | marca |
    |--------|-------|
    | Laptop | Dell  |
    | Monitor| Dell  |