PostgreSQL存取jsonb


從PostgreSQL 9.3開始,json就成了postgres里的一種數據類型,也就是和varchar、int一樣,我們表里的一個字段的類型可以為json了。

與此同時,postgres還提供了jsonb格式,jsonb格式是json的二進制形式,二者的區別在於json寫入快,讀取慢,jsonb寫入慢,讀取快,但在操作上,二者是沒有區別的。下面以jsonb為例。

創建表

假設我們要存儲的json數據是這樣的:

{
"id": ID
"name":"名字", "age":年齡 }

建表語句如下:

  1.  
    create table if not exists name_age (
  2.  
    info jsonb
  3.  
    )

好了,這樣就創建了一張表,里面只有一個 info 字段,下面開始進行CRUD操作。

插入數據

插入數據可以直接以json格式插入:

insert into name_age values('{"id":1,"name":"小明", "age":18}')

在json里插入新的key值gender,如下:

SELECT info||'{"gender":"男"}'::jsonb from name_age where (info->>'id')::int4 = 1

查詢數據

Postgres里的查詢需要用到查詢符。比如說,我們要查詢id為1的數據,語句如下:

select info from name_age where info @> '{"id":1}'::jsonb

用到了 @> 這個查詢符,表明info當前這條記錄里的頂層json中有沒有id為1的key-value對;有的話則滿足條件。

再來一個復雜一點的查詢的,查詢 age>16 的記錄,並且只顯示 name ,語句如下:

select info->'name' from name_age where (info->>'age')::int4 > 16

關於詳細運算符使用,請參考官方文檔: 9.15. JSON Functions and Operators

修改數據

下面,將 age 從 18 改為 22 ,SQL語句:

SELECT info ||'{"age":22}'::jsonb from name_age where (info->>'id')::int4 = 1

上述用法僅適用於9.5以上,9.5以下需要整個記錄更新,不可以單獨修改某個值。

除了操作符以外,還可以使用函數操作: jsonb_set() ,函數簽名如下:

jsonb_set(target jsonb, path text[], new_value jsonb[, create_missing boolean])

詳細使用可參考 9.15. JSON Functions and Operators

刪除數據

刪除age這個key,SQL如下:

SELECT info-'age' from name_age where (info->>'id')::int4 = 1

直接用操作符 - 即可。

總結

PostgreSQL 9.5以上的版本中有了很多方便的操作符,使得操作json變得非常方便了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM