PostgreSQL の JSON フィールドのデータを更新する
Shihab Sikder
2023年6月20日
- PostgreSQL の JSON データ型
- PostgreSQL の JSON フィールドに新しいキーと値のペアを挿入する
-
JSONB_SET()
を使用して PostgreSQL の JSON フィールドの既存のデータを更新する
この記事では、PostgreSQL を使用した JSON フィールドの更新について説明します。
PostgreSQL の JSON データ型
PostgreSQL には、JSON と JSONB の 2つの JSON データ型があります。 次のデータが入力された次のテーブルがあるとします。
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)
次のテーブルを作成するには、次の 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"}');
PostgreSQL の JSON フィールドに新しいキーと値のペアを挿入する
ここで、テーブルの PC1
に GPU
を追加するとします。 キーはGPU
、値はRTX 3060
になります。
これは、通常の UPDATE
クエリのように UPDATE
コマンドを使用して挿入できます。
構文:
UPDATE table_name
SET json_field_name = json_field_name || new_key_value
||
operator は、新しい JSON オブジェクトを前のものと連結します。 ここで、{"GPU":"RTX 3060"}
を PC1
に挿入するには、SQL クエリは次のようになります。
UPDATE product
SET details = details || '{"GPU":"RTX 3060"}'
WHERE product='PC1';
これで、テーブルは次のようになります。
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)
PC1
が新しいキー値 "GPU": "RTX 3060"
を取得したことがわかります。
JSONB_SET()
を使用して PostgreSQL の JSON フィールドの既存のデータを更新する
PC1
プロセッサを Ryzen 9
に更新するように依頼されたとします。 JSON データ型の既存の値を変更するには、JSONB_SET()
メソッドを使用する必要があります。
JSON データ型の列、キー、値の 3つのパラメーターを使用します。 したがって、PC1
の CPU
を Ryzen 9
で更新するには、次のクエリを実行する必要があります。
UPDATE product
SET details = JSONB_SET(details,'{CPU}','"Ryzen 9"')
WHERE product='PC1';
更新後、テーブルには次のデータが含まれます。
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)
CPU
が正常に更新されたことがわかります。
JSONB_SET()
を使用する場合、次のことを確認する必要があります。
- 最初のパラメーターは、JSON データ型の列になります。
- 2 番目のパラメーターは、中括弧 (単一引用符内) で囲まれたキー名になります。
- 3 番目のパラメーターは、一重引用符で囲まれた更新された値になります。
PostgreSQL の JSON データ型の詳細については、このブログ を参照してください。 また、公式ドキュメント にアクセスすることもできます。
著者: Shihab Sikder