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