Aktualisieren Sie Daten im JSON-Feld in PostgreSQL

Shihab Sikder 20 Juni 2023
  1. JSON-Datentyp in PostgreSQL
  2. Fügen Sie ein neues Schlüssel-Wert-Paar in das JSON-Feld in PostgreSQL ein
  3. Verwenden Sie JSONB_SET(), um vorhandene Daten im JSON-Feld in PostgreSQL zu aktualisieren
Aktualisieren Sie Daten im JSON-Feld in PostgreSQL

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:

  1. Der erste Parameter ist die Spalte des JSON-Datentyps.
  2. Der zweite Parameter ist der Schlüsselname, eingeschlossen in geschweiften Klammern (in einfachen Anführungszeichen).
  3. 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.

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

Verwandter Artikel - PostgreSQL Update