PostgreSQL の JSONB

Shihab Sikder 2023年1月30日
  1. PostgreSQL で JSONB を使用してテーブルを作成する
  2. JSONB データタイプを PostgreSQL に挿入する
  3. PostgreSQL における JSONB の長所と短所
PostgreSQL の JSONB

JSONB は、分解されたバイナリ形式で保存される一種の JSON データです。Google のトレンドをフォローしたり、調査を行ったりすると、JSON が開発部門でますます人気になっていることがわかります。

現在、NoSQL はデフォルトで JSON データを保存できます。使用するのは堅牢であり、ネストされたオブジェクトを別のオブジェクト内に配置できるため、したがって、それはより人気が高まっています。

Postgres を使用すると、ユーザーは SQL タイプデータベースに JSON および JSONB データタイプを作成できます。

PostgreSQL で JSONB を使用してテーブルを作成する

製品のテーブルを作成するとします。製品にはさまざまな種類があります。

たとえば、それらのいくつかはリットルで、いくつかはグラムで、またはいくつかは断片で測定することができます。また、特定の製品について、他の製品と類似できないタイプのデータが存在する可能性があります。

この場合、JSON または JSONB を使用してこの見慣れないデータを保存することをお勧めします。JSONB タイプのデータを使用したテーブルの作成を以下に示します。

CREATE TABLE Products(
    id SERIAL PRIMARY KEY,
    seller TEXT NOT NULL,
    data JSONb NOT NULL
);

JSONB データタイプを PostgreSQL に挿入する

以前は、JSONb タイプのデータを含む列を含むテーブルを作成しました。それでは、テーブルにデータを入力しましょう。

ご存知のとおり、JSONB は、Python の辞書と同じように、キー値形式でデータを保存します。上記の表にいくつかのデータを入力してみましょう。

INSERT INTO Products(seller,data)
VALUES
('Jones Heard',
'{ "name": "Milk Shake",
"price": "10$",
"ingredients":
    { "Milk":
        { "amount":"250ml","calorie":"100 Kcl"},
    "Coco Powder":
        { "amount":"50 gram", "calorie":"100 Kcl"}
    }
}'
);

JSONB データをテーブルに正常に挿入したら、追加されたデータを表示します。上記の JSON から、ネストされたオブジェクトがあることがわかります。

ここで重要なデータには、名前価格、および成分があります。成分の中には、カロリー値のある成分とその量があります。

つまり、ネストされたオブジェクトです。ここでの動機は、このようなネストされた出力を持つために複雑な結合を必要としないことです。

SELECT id ,seller, jsonb_pretty(data) as Product_Details
FROM products;

出力:

 id |   seller    |         product_details
----+-------------+----------------------------------
  1 | Jones Heard | {                               +
    |             |     "name": "Milk Shake",       +
    |             |     "price": "10$",             +
    |             |     "ingredients": {            +
    |             |         "Milk": {               +
    |             |             "amount": "250ml",  +
    |             |             "calorie": "100 Kcl"+
    |             |         },                      +
    |             |         "Coco Powder": {        +
    |             |             "amount": "50 gram",+
    |             |             "calorie": "100 Kcl"+
    |             |         }                       +
    |             |     }                           +
    |             | }
(1 row)

このコマンドでは、jsonb_pretty() 関数を使用しました。JSON オブジェクトを必要なインデントでフォーマットします。

そうしないと、JSON 全体が 1 行に表示され、オブジェクトの関係を理解するのが非常に困難になります。

PostgreSQL における JSONB の長所と短所

Postgres には JSON タイプがありましたが、JSONB 形式も導入されました。これまで見てきたように、宣言やその他のクエリは JSON と非常によく似ています。

JSON よりも JSONB を使用する場合の利点は次のとおりです。

  1. JSON よりも効率が良い。
  2. 分解されたバイナリであるため、処理が高速になります。
  3. JSON はサポートしていませんが、インデックス作成はサポートしています。

また、いくつかの欠点があります。以下は次のとおりです。

  1. 入力が遅い。
  2. フットプリントが増えるため、JSON よりも多くのディスクスペースが必要になります。
  3. 場合によっては、集約関数によってプロセスが遅くなることがあります。

JSONB について詳しく知りたい場合は、このブログにアクセスしてください。また、こちらの公式資料もご確認ください。

著者: Shihab Sikder
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