Actualizar datos en el campo JSON en PostgreSQL
- Tipo de datos JSON en PostgreSQL
- Inserte un nuevo par clave-valor en el campo JSON en PostgreSQL
-
Use
JSONB_SET()
para actualizar los datos existentes 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:
- El primer parámetro será la columna de tipo de datos JSON.
- El segundo parámetro será el nombre de la clave, entre llaves (entre comillas simples).
- 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.