HOWTO · PostgreSQL
Actualizar datos en el campo JSON en PostgreSQL
Este artículo analiza cómo actualizar un campo JSON en Postgres. Con JSONB_SET(), puede modificar el valor-clave JSON existente.
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.