首頁 > 軟體

教你在PostgreSql中使用JSON欄位的方法

2022-12-01 14:04:08

通過本文可掌握在pg資料庫中如何正確使用json欄位,如何進行資料查詢,在where子查詢中如何使用,以及對json值進行聚合查詢使用.

概述

JSON 代表 JavaScript Object Notation。JSON是開放的標準格式,由key-value對組成。JSON的主要用於在伺服器與web應用之間傳輸資料。新建表如下:

CREATE TABLE "public"."biz_orders" (  "ID" int8 NOT NULL DEFAULT nextval('"biz_orders_ID_seq"'::regclass),
  "info" json NOT NULL
);

表初始化語句:

INSERT INTO "biz_orders"("ID", "info") VALUES (1, '{"name":"張三","items":{"product":"啤酒","qty":6}}');
INSERT INTO "biz_orders"("ID", "info") VALUES (2, '{"name":"李四","items":{"product":"辣條","qty":8}}');
INSERT INTO "biz_orders"("ID", "info") VALUES (3, '{"name":"王五","items":{"product":"蘋果","qty":18}}');
INSERT INTO "biz_orders"("ID", "info") VALUES (4, '{"name":"趙一","items":{"product":"香蕉","qty":20}}');

使用

1、簡單查詢

select * from biz_orders;

2、查詢使用->操作符,查詢json中所有顧客作為鍵

SELECT info -> 'name' AS customer FROM biz_orders;

3、下面使用->>操作獲取所有顧客姓名作為值

SELECT info ->> 'name' AS customer FROM biz_orders;

4、根據json物件的key查詢值

SELECT
   info -> 'items' ->> 'product' as product
FROM
   biz_orders
ORDER BY
   product;

5、where查詢中使用json欄位

SELECT
   info ->> 'name' AS customer
FROM
   biz_orders
WHERE
   info -> 'items' ->> 'product' = '辣條'

6、case 查詢​​​​​​​

SELECT
   info ->> 'name' AS customer,
   info -> 'items' ->> 'product' AS product
FROM
   biz_orders
WHERE
   CAST (
      info -> 'items' ->> 'qty' AS INTEGER
   ) = 6

7、聚合函數​​​​​​​

SELECT
  MIN( CAST ( info -> 'items' ->> 'qty' AS INTEGER ) ),
  MAX( CAST ( info -> 'items' ->> 'qty' AS INTEGER ) ),
  SUM( CAST ( info -> 'items' ->> 'qty' AS INTEGER ) ),
  AVG( CAST ( info -> 'items' ->> 'qty' AS INTEGER ) ) 
FROM
  biz_orders;

8、型別查詢​​​​​​​

SELECT
  json_typeof ( info -> 'items' -> 'qty' ) 
FROM
  biz_orders;

總結

通過以上例子,知道在pg資料庫中如何儲存json資料,並且掌握基本的查詢,在查詢條件中使用json,在聚合函數中使用。雖然,關係型資料庫的強項不是在於json處理,而MongoDb或者Redis等NoSQL更適合做這類處理,但是在不引入一個新資料儲存的情況下,利用現有架構解決生產問題。隨著pg甚至mysql不斷向前發展,相信未來對於json等資料支援會越來越好,效能也會越來越高。

到此這篇關於乾貨教你在PostgreSql中使用JSON欄位的文章就介紹到這了,更多相關PostgreSql使用JSON欄位內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com