時間:2024-03-26 14:33作者:下載吧人氣:15
結合近期接觸到的知識點,做了一個歸納。會持續更新
json
官網文檔 http://www.postgres.cn/docs/12/datatype-json.html
總結:json輸入快,處理慢。是精準拷貝,所以能準確存儲遺留對象的原格式,如對象鍵順序。jsonb輸入慢,處理快。會被重新解析成json數據,不保存原對象的鍵順序,并且去重相同的鍵值,以最后一個為準。通常,除非有特別特殊的需要(例如遺留的對象鍵順序假設),大多數應用應該 更愿意把 JSON 數據存儲為jsonb
官網:
json 和 jsonb數據類型接受***幾乎***完全相同的值集合作為輸入。 主要的實際區別之一是效率。json數據類型存儲輸入文本的精準拷貝,處理函數必須在每 次執行時必須重新解析該數據。而jsonb數據被存儲在一種分解好的 二進制格式中,它在輸入時要稍慢一些,因為需要做附加的轉換。但是 jsonb在處理時要快很多,因為不需要解析。jsonb也支 持索引,這也是一個令人矚目的優勢。
由于json類型存儲的是輸入文本的準確拷貝,其中可能會保留在語法 上不明顯的、存在于記號之間的空格,還有 JSON 對象內部的鍵的順序。還有, 如果一個值中的 JSON 對象包含同一個鍵超過一次,所有的鍵/值對都會被保留( 處理函數會把最后的值當作有效值)。相反,jsonb不保留空格、不 保留對象鍵的順序并且不保留重復的對象鍵。如果在輸入中指定了重復的鍵,只有 最后一個值會被保留。
通常,除非有特別特殊的需要(例如遺留的對象鍵順序假設),大多數應用應該 更愿意把 JSON 數據存儲為jsonb
由于json類型存儲的是輸入文本的準確拷貝,其中可能會保留在語法 上不明顯的、存在于記號之間的空格,還有 JSON 對象內部的鍵的順序。還有, 如果一個值中的 JSON 對象包含同一個鍵超過一次,所有的鍵/值對都會被保留( 處理函數會把最后的值當作有效值)。相反,jsonb不保留空格、不 保留對象鍵的順序并且不保留重復的對象鍵。如果在輸入中指定了重復的鍵,只有 最后一個值會被保留。
———–1.鍵的順序
SELECT ‘{“bar”: “baz”, “balance”: 7.77, “active”:false}’::json;
json
————————————————-
{“bar”: “baz”, “balance”: 7.77, “active”:false}
(1 row)
SELECT ‘{“bar”: “baz”, “balance”: 7.77, “active”:false}’::jsonb;
jsonb
————————————————–
{“bar”: “baz”, “active”: false, “balance”: 7.77}
(1 row)
———2.去重
SELECT ‘{“bar”: “baz”, “balance”: 7.77, “balance”:false}’::jsonb; –去重
{“bar”: “baz”, “balance”: false}
SELECT ‘{“bar”: “baz”, “balance”: 7.77, “balance”:false}’::json; –不去重
{“bar”: “baz”, “balance”: 7.77, “balance”:false}
select ‘[1, 2, 2]’::jsonb –數組不去重
[1, 2, 2]
網友評論