PostgreSQL 中的 JSONB

Shihab Sikder 2023年1月30日
  1. 在 PostgreSQL 中使用 JSONB 建立表
  2. 在 PostgreSQL 中插入 JSONB 資料型別
  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
);

在 PostgreSQL 中插入 JSONB 資料型別

之前,我們建立的表包含一個具有 JSONb 型別資料的列。現在,讓我們填充表格。

眾所周知,JSONB 以 key-value 格式儲存資料,與 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 中,我們可以注意到我們有巢狀的物件。

在鍵 data 中,我們有 namepriceingredient。在成分中,我們有成分及其數量和卡路里值。

所以,它是一個巢狀物件。這裡的動機是我們不需要複雜的連線來獲得這樣的巢狀輸出。

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 會出現在一行中,很難理解物件之間的關係。

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