Aktualisieren Sie Daten im JSON-Feld in PostgreSQL
- JSON-Datentyp in PostgreSQL
- Fügen Sie ein neues Schlüssel-Wert-Paar in das JSON-Feld in PostgreSQL ein
-
Verwenden Sie
JSONB_SET()
, um vorhandene Daten im JSON-Feld in PostgreSQL zu aktualisieren
In diesem Artikel wird das Aktualisieren eines JSON-Felds mit PostgreSQL erläutert.
JSON-Datentyp in PostgreSQL
Es gibt zwei JSON-Datentypen in PostgreSQL: JSON und JSONB. Angenommen, Sie haben die folgende Tabelle mit den folgenden Daten gefüllt:
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)
Um die folgende Tabelle zu erstellen, führen wir die folgende SQL-Abfrage aus:
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"}');
Fügen Sie ein neues Schlüssel-Wert-Paar in das JSON-Feld in PostgreSQL ein
Angenommen, Sie möchten GPU
zu PC1
in der Tabelle hinzufügen. Der Schlüssel lautet GPU
und der Wert RTX 3060
.
Wir können dies wie die normale UPDATE
-Abfrage mit dem UPDATE
-Befehl einfügen.
Syntax:
UPDATE table_name
SET json_field_name = json_field_name || new_key_value
Das ||
-Operator verkettet das neue JSON-Objekt mit dem vorherigen. Um nun {"GPU":"RTX 3060"}
in PC1
einzufügen, lautet die SQL-Abfrage:
UPDATE product
SET details = details || '{"GPU":"RTX 3060"}'
WHERE product='PC1';
Jetzt hat die Tabelle folgendes:
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)
Sie können sehen, dass PC1
einen neuen Schlüsselwert "GPU": "RTX 3060"
bekommen hat.
Verwenden Sie JSONB_SET()
, um vorhandene Daten im JSON-Feld in PostgreSQL zu aktualisieren
Angenommen, Sie wurden aufgefordert, den PC1
-Prozessor auf Ryzen 9
zu aktualisieren. Um einen bestehenden Wert im JSON-Datentyp zu ändern, müssen Sie die Methode JSONB_SET()
verwenden.
Es werden 3 Parameter benötigt: die JSON-Datentypspalte, der Schlüssel und der Wert. Wenn wir also die CPU
in PC1
mit Ryzen 9
aktualisieren, müssen wir die folgende Abfrage durchführen:
UPDATE product
SET details = JSONB_SET(details,'{CPU}','"Ryzen 9"')
WHERE product='PC1';
Nach der Aktualisierung enthält die Tabelle folgende Daten:
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)
Wir können sehen, dass die CPU
erfolgreich aktualisiert wurde.
Bei der Verwendung von JSONB_SET()
müssen wir folgende Dinge sicherstellen:
- Der erste Parameter ist die Spalte des JSON-Datentyps.
- Der zweite Parameter ist der Schlüsselname, eingeschlossen in geschweiften Klammern (in einfachen Anführungszeichen).
- Der dritte Parameter ist der aktualisierte Wert, der in einfache Anführungszeichen gesetzt wird.
Erfahren Sie mehr über den JSON-Datentyp für PostgreSQL in diesem Blog. Sie können auch die offizielle Dokumentation besuchen.