JSONB en PostgreSQL

Shihab Sikder 13 junio 2022
  1. Crear una tabla con JSONB en PostgreSQL
  2. Inserte el tipo de datos JSONB en PostgreSQL
  3. Pros y contras de JSONB en PostgreSQL
JSONB en PostgreSQL

JSONB es un tipo de datos JSON almacenados en un formato binario descompuesto. Si sigue las tendencias de Google o investiga un poco, encontrará que JSON se está volviendo cada vez más popular en el sector del desarrollo.

Hoy en día, NoSQL, por defecto, puede almacenar datos JSON. Como es robusto de usar y podemos poner objetos anidados dentro de otro objeto; por lo tanto, se está volviendo más popular.

Postgres permite a los usuarios crear tipos de datos JSON y JSONB en la base de datos de tipo SQL.

Crear una tabla con JSONB en PostgreSQL

Digamos que queremos crear una tabla para productos. Puede haber varios tipos de productos.

Por ejemplo, algunos de ellos se pueden medir en litros, algunos en gramos o algunos en piezas. Además, puede haber algún tipo de datos para un producto específico que no puede ser similar a otros productos.

En este caso, es mejor usar JSON o JSONB para almacenar estos datos desconocidos. La creación de una tabla con el tipo de datos JSONB se proporciona a continuación:

CREATE TABLE Products(
    id SERIAL PRIMARY KEY,
    seller TEXT NOT NULL,
    data JSONb NOT NULL
);

Inserte el tipo de datos JSONB en PostgreSQL

Previamente, hemos creado la tabla que contiene una columna con el tipo de datos JSONb. Ahora, completemos la tabla.

Como sabemos, JSONB almacena los datos en un formato clave-valor, al igual que el diccionario en Python. Completemos la tabla anterior con algunos datos.

INSERT INTO Products(seller,data)
VALUES
('Jones Heard',
'{ "name": "Milk Shake",
"price": "10$",
"ingredients":
    { "Milk":
        { "amount":"250ml","calorie":"100 Kcl"},
    "Coco Powder":
        { "amount":"50 gram", "calorie":"100 Kcl"}
    }
}'
);

Como insertamos con éxito los datos JSONB en la tabla, es hora de ver los datos agregados. Del JSON anterior, podemos notar que tenemos objetos anidados.

Aquí en la clave data, tenemos name, price e ingredient. Dentro de ingredient, tenemos ingredientes y su cantidad con el valor calórico.

Entonces, es un objeto anidado. La motivación aquí es que no necesitamos uniones complejas para tener una salida anidada como esta.

SELECT id ,seller, jsonb_pretty(data) as Product_Details
FROM products;

Producción :

 id |   seller    |         product_details
----+-------------+----------------------------------
  1 | Jones Heard | {                               +
    |             |     "name": "Milk Shake",       +
    |             |     "price": "10$",             +
    |             |     "ingredients": {            +
    |             |         "Milk": {               +
    |             |             "amount": "250ml",  +
    |             |             "calorie": "100 Kcl"+
    |             |         },                      +
    |             |         "Coco Powder": {        +
    |             |             "amount": "50 gram",+
    |             |             "calorie": "100 Kcl"+
    |             |         }                       +
    |             |     }                           +
    |             | }
(1 row)

Aquí en el comando, usamos la función jsonb_pretty(). Da formato al objeto JSON con las sangrías necesarias.

De lo contrario, todo el JSON aparecerá en una sola línea y es muy difícil entender las relaciones de los objetos.

Pros y contras de JSONB en PostgreSQL

Aunque había un tipo JSON en Postgres, también introdujeron el formato JSONB. Como vimos, la declaración y otras consultas son bastante similares al JSON.

Aquí hay algunos beneficios al usar JSONB sobre JSON:

  1. Tiene mejor eficiencia que JSON.
  2. Permite un procesamiento más rápido ya que es binario descompuesto.
  3. Admite indexación mientras que JSON no lo admite.

Además, tiene algunos inconvenientes. Aquí están los siguientes:

  1. Entrada más lenta.
  2. Ocupa más espacio en disco que JSON, ya que deja más huellas.
  3. En algunos casos, las funciones agregadas pueden ralentizar los procesos.

Si quieres saber más sobre JSONB, visita este blog. Además, consulte la documentación oficial de aquí.

Shihab Sikder avatar Shihab Sikder avatar

I'm Shihab Sikder, a professional Backend Developer with experience in problem-solving and content writing. Building secure, scalable, and reliable backend architecture is my motive. I'm working with two companies as a part-time backend engineer.

LinkedIn Website