Actualizar datos en el campo JSON en PostgreSQL

Shihab Sikder 20 junio 2023
  1. Tipo de datos JSON en PostgreSQL
  2. Inserte un nuevo par clave-valor en el campo JSON en PostgreSQL
  3. Use JSONB_SET() para actualizar los datos existentes en el campo JSON en PostgreSQL
Actualizar datos en el campo JSON en PostgreSQL

Este artículo discutirá la actualización de un campo JSON usando PostgreSQL.

Tipo de datos JSON en PostgreSQL

Hay dos tipos de datos JSON en PostgreSQL: JSON y JSONB. Supongamos que tiene la siguiente tabla llena con los siguientes datos:

postgres=# select * from product;
 id | product |                      details
----+---------+---------------------------------------------------
  1 | PC1     | {"CPU": "4.1 GHz", "HDD": "2TB", "RAM": "16GB"}
  2 | PC2     | {"CPU": "3.1 GHz", "HDD": "1TB", "RAM": "8GB"}
  3 | PC3     | {"CPU": "2.5 GHz", "HDD": "2.5TB", "RAM": "32GB"}
  4 | PC4     | {"CPU": "3.5 GHz", "HDD": "2TB", "RAM": "64GB"}
  5 | PC5     | {"CPU": "2.8 GHz", "HDD": "2TB", "RAM": "4GB"}
(5 rows)

Para crear la siguiente tabla, ejecutamos la siguiente consulta SQL:

CREATE TABLE product (
  id INT,
  product VARCHAR,
  details JSONB
);

INSERT INTO product VALUES (1, 'PC1','{"CPU":"4.1 GHz", "RAM":"16GB", "HDD":"2TB"}');
INSERT INTO product VALUES (1, 'PC2','{"CPU":"3.1 GHz", "RAM":"8GB", "HDD":"1TB"}');
INSERT INTO product VALUES (1, 'PC3','{"CPU":"2.5 GHz", "RAM":"32GB", "HDD":"2.5TB"}');
INSERT INTO product VALUES (1, 'PC4','{"CPU":"3.5 GHz", "RAM":"64GB", "HDD":"2TB"}');
INSERT INTO product VALUES (1, 'PC5','{"CPU":"2.8 GHz", "RAM":"4GB", "HDD":"2TB"}');

Inserte un nuevo par clave-valor en el campo JSON en PostgreSQL

Ahora, supongamos que desea agregar GPU a PC1 en la tabla. La clave será GPU, y el valor será RTX 3060.

Podemos insertar esto usando el comando ACTUALIZAR como la consulta normal ACTUALIZAR.

Sintaxis:

UPDATE table_name
SET json_field_name = json_field_name || new_key_value

El || El operador concatenará el nuevo objeto JSON con el anterior. Ahora, para insertar {"GPU":"RTX 3060"} en PC1, la consulta SQL será:

UPDATE product
SET details = details || '{"GPU":"RTX 3060"}'
WHERE product='PC1';

Ahora la tabla tendrá lo siguiente:

postgres=# select * from product;
 id | product |                              details
----+---------+--------------------------------------------------------------------
  2 | PC2     | {"CPU": "3.1 GHz", "HDD": "1TB", "RAM": "8GB"}
  3 | PC3     | {"CPU": "2.5 GHz", "HDD": "2.5TB", "RAM": "32GB"}
  4 | PC4     | {"CPU": "3.5 GHz", "HDD": "2TB", "RAM": "64GB"}
  5 | PC5     | {"CPU": "2.8 GHz", "HDD": "2TB", "RAM": "4GB"}
  1 | PC1     | {"CPU": "4.1 GHz", "GPU": "RTX 3060", "HDD": "2TB", "RAM": "16GB"}
(5 rows)

Puede ver que PC1 obtuvo una nueva clave-valor "GPU": "RTX 3060".

Use JSONB_SET() para actualizar los datos existentes en el campo JSON en PostgreSQL

Supongamos que le han pedido que actualice el procesador PC1 a Ryzen 9. Para modificar un valor existente en el tipo de datos JSON, debe utilizar el método JSONB_SET().

Toma 3 parámetros: la columna, la clave y el valor del tipo de datos JSON. Entonces, actualizando la CPU en PC1 con Ryzen 9, necesitamos realizar la siguiente consulta:

UPDATE product
SET details = JSONB_SET(details,'{CPU}','"Ryzen 9"')
WHERE product='PC1';

Después de la actualización, la tabla tiene los siguientes datos:

postgres=# select * from product;
 id | product |                              details
----+---------+--------------------------------------------------------------------
  2 | PC2     | {"CPU": "3.1 GHz", "HDD": "1TB", "RAM": "8GB"}
  3 | PC3     | {"CPU": "2.5 GHz", "HDD": "2.5TB", "RAM": "32GB"}
  4 | PC4     | {"CPU": "3.5 GHz", "HDD": "2TB", "RAM": "64GB"}
  5 | PC5     | {"CPU": "2.8 GHz", "HDD": "2TB", "RAM": "4GB"}
  1 | PC1     | {"CPU": "Ryzen 9", "GPU": "RTX 3060", "HDD": "2TB", "RAM": "16GB"}
(5 rows)

Podemos ver que la CPU se actualiza con éxito.

Al usar JSONB_SET(), debemos asegurarnos de lo siguiente:

  1. El primer parámetro será la columna de tipo de datos JSON.
  2. El segundo parámetro será el nombre de la clave, entre llaves (entre comillas simples).
  3. El tercer parámetro será el valor actualizado colocado entre comillas simples.

Conozca más sobre el tipo de datos JSON para PostgreSQL en este blog. Además, puedes visitar la documentación oficial.

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

Artículo relacionado - PostgreSQL Update