亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PostgreSQL查詢和處理JSON數(shù)據(jù)

 更新時(shí)間:2023年11月25日 08:47:29   作者:c_zyer  
這篇文章主要給大家介紹了關(guān)于PostgreSQL查詢和處理JSON數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下

前言

由于項(xiàng)目?jī)?nèi)使用的Postgresql 且存儲(chǔ)了一些非結(jié)構(gòu)化的json數(shù)據(jù),里面含有統(tǒng)計(jì)與記錄,并且有嵌套關(guān)系,所以需要了解如何查詢和處理Postgresql中的JSON數(shù)據(jù)。

  • Postgresql:9.6

  • 官方文檔:http://postgres.cn/docs/9.6/functions-json.html#FUNCTIONS-JSON-CREATION-TABLE

  • 一張基礎(chǔ)訂單表結(jié)構(gòu):

-- order表
"id" bigserial primary key,
"order_id" varchar(55) COLLATE "default",
"product_id" int8,
"order_json" text COLLATE "default",
"create_time" timestamp(6),

背景知識(shí):json和jsonb 操作符

操作符右操作數(shù)類型描述例子例子結(jié)果
->int獲得 JSON 數(shù)組元素(索引從 0 開始,負(fù)整數(shù)結(jié)束)‘[{“a”:“foo”},{“b”:“bar”},{“c”:“baz”}]’::json->2{“c”:“baz”}
->text通過(guò)鍵獲得 JSON 對(duì)象域‘{“a”: {“b”:“foo”}}’::json->‘a’{“b”:“foo”}
->>int以文本形式獲得 JSON 數(shù)組元素‘[1,2,3]’::json->>23
->>text以文本形式獲得 JSON 對(duì)象域‘{“a”:1,“b”:2}’::json->>‘b’2
#>text[]獲取在指定路徑的 JSON 對(duì)象‘{“a”: {“b”:{“c”: “foo”}}}’::json#>‘{a,b}’{“c”: “foo”}
#>>text[]以文本形式獲取在指定路徑的 JSON 對(duì)象‘{“a”:[1,2,3],“b”:[4,5,6]}’::json#>>‘{a,2}’3

問(wèn):如何查看JSON指定的key內(nèi)容?

通過(guò)::json的語(yǔ)法

select order_json::json->'orderBody' from order -- 對(duì)象域
select order_json::json->>'orderBody' from order -- 文本
select order_json::json#>'{orderBody}' from order -- 對(duì)象域
select order_json::json#>>'{orderBody}' from order -- 文本

還有更多的jsonb操作符和json操作函數(shù)見官方文檔

問(wèn):怎么處理多層嵌套的JSON?

就是采用基本的JSON語(yǔ)法,注意結(jié)果是對(duì)象域還是文本,對(duì)象域可以繼續(xù)取用字段,文本就不能繼續(xù)查看JSON咯

select '{"sites":{"site":{"id":"1","name":"菜鳥教程","url":"www.runoob.com"}}}'::json->'sites'->'site' -- 對(duì)象域
select '{"sites":{"site":{"id":"1","name":"菜鳥教程","url":"www.runoob.com"}}}'::json->'sites'->>'site' -- 文本

問(wèn):怎么處理JSON數(shù)組呢?

也是通過(guò)JSON的基本操作先定位到數(shù)組對(duì)象所在的Key,通過(guò)key取到對(duì)應(yīng)的value后直接->(0),就可以取用到對(duì)應(yīng)的對(duì)象域,注意對(duì)象域和文本,轉(zhuǎn)化為文本就不能夠在取key和具體數(shù)據(jù)數(shù)據(jù)咯

還有很多關(guān)于json相關(guān)的方法,可以詳見官方文檔

select '{"sites":{"site":[{"id":"1","name":"菜鳥教程","url":"www.runoob.com"},{"id":"2","name":"菜鳥工具","url":"c.runoob.com"},{"id":"3","name":"Google","url":"www.google.com"}]}}'::json->'sites'->'site'->(0)

select '{"sites":{"site":[{"id":"1","name":"菜鳥教程","url":"www.runoob.com"},{"id":"2","name":"菜鳥工具","url":"c.runoob.com"},{"id":"3","name":"Google","url":"www.google.com"}]}}'::json->'sites'->'site'->(0)->>'id'

延伸:如何取用JSON數(shù)組的最后一個(gè)對(duì)象數(shù)據(jù)?

select json_array_length('{"sites":{"site":[{"id":"1","name":"菜鳥教程","url":"www.runoob.com"},{"id":"2","name":"菜鳥工具","url":"c.runoob.com"},{"id":"3","name":"Google","url":"www.google.com"}]}}'::json->'sites'->'site') -- 查詢json數(shù)據(jù)的長(zhǎng)度

select '{"sites":{"site":[{"id":"1","name":"菜鳥教程","url":"www.runoob.com"},{"id":"2","name":"菜鳥工具","url":"c.runoob.com"},{"id":"3","name":"Google","url":"www.google.com"}]}}'::json->'sites'->'site'->(json_array_length('{"sites":{"site":[{"id":"1","name":"菜鳥教程","url":"www.runoob.com"},{"id":"2","name":"菜鳥工具","url":"c.runoob.com"},{"id":"3","name":"Google","url":"www.google.com"}]}}'::json->'sites'->'site') -1)

問(wèn):怎么替換JSON字符串中的內(nèi)容?

通過(guò)select語(yǔ)句先看一下官方語(yǔ)法

函數(shù)返回值描述例子例子結(jié)果
jsonb_set(target jsonb, path text[], new_value jsonb[, create_missing boolean])jsonb如果create_missing是真的 (缺省是true)并且通過(guò)path 指定部分不存在,那么返回target, 它具有path指定部分, new_value替換部分, 或者new_value添加部分。 正如路徑導(dǎo)向的操作符,負(fù)整數(shù)出現(xiàn)在JSON數(shù)組結(jié)尾的path>計(jì)數(shù)中。(1)jsonb_set(‘[{“f1”:1,“f2”:null},2,null,3]’, ‘{0,f1}’,‘[2,3,4]’, false)
(2)jsonb_set(‘[{“f1”:1,“f2”:null},2]’, ‘{0,f3}’,‘[2,3,4]’)
[{“f1”:[2,3,4],“f2”:null},2,null,3]
[{“f1”: 1, “f2”: null, “f3”: [2, 3, 4]}, 2]

官方描述的挺明確:jsonb_set的方法

  • 第一位參數(shù),需要是jsonb的對(duì)象域
  • 第二位參數(shù),是訪問(wèn)對(duì)應(yīng)value的path(注意這個(gè)path的語(yǔ)法可以是{a,b},表名key-a中的key-b,數(shù)據(jù)的話參看表格中的(2))
  • 第三位參數(shù),就是一個(gè)新的值,來(lái)替換第一個(gè)參數(shù)中的第二個(gè)參數(shù)key的value
  • 第四個(gè)參數(shù),如果create_missing是真的 (缺省是true)并且通過(guò)path 指定部分不存在,那么返回target, 它具有path指定部分, new_value替換部分, 或者new_value添加部分。 正如路徑導(dǎo)向的操作符,負(fù)整數(shù)出現(xiàn)在JSON數(shù)組結(jié)尾的path>計(jì)數(shù)中

參照官方文檔,簡(jiǎn)單的一次內(nèi)容替換

select jsonb_set(order_json::jsonb,'{premsg}','test'::jsonb) from order 

那么如果是嵌套多層的JSON value可以替換嗎?–可以的,語(yǔ)法是一樣的,就是需要定位到指定的字段就可以

select jsonb_set((order_json::json->>'rspDesc')::jsonb, '{preOrder}', '"11111"'::jsonb) from order

上面是select語(yǔ)句,那具體的update語(yǔ)句怎么寫呢?

語(yǔ)法:UPDATE 表明 set 列名 = (jsonb_set(列名::jsonb,'{key}','"value"'::jsonb)) where 條件 

update order set order_json = jsonb_set(order_json::jsonb,'{rspDesc}',(jsonb_set((event_json::json->>'rspDesc')::jsonb, '{preNumber}', '"999999999"'::jsonb)::jsonb)) -- 需要先把需要改的內(nèi)容替換好,然后在整體更新替換,此時(shí)這個(gè)rspDesc是對(duì)象域格式

網(wǎng)上基本沒(méi)有執(zhí)行成功的例子,在此記錄下。

總結(jié)

到此這篇關(guān)于PostgreSQL查詢和處理JSON數(shù)據(jù)的文章就介紹到這了,更多相關(guān)pgSQL處理JSON數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解PostgreSQL提升批量數(shù)據(jù)導(dǎo)入性能的n種方法

    詳解PostgreSQL提升批量數(shù)據(jù)導(dǎo)入性能的n種方法

    這篇文章主要介紹了PostgreSQL提升批量數(shù)據(jù)導(dǎo)入性能的n種方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • PostgreSQL定時(shí)清理舊數(shù)據(jù)的實(shí)現(xiàn)方法

    PostgreSQL定時(shí)清理舊數(shù)據(jù)的實(shí)現(xiàn)方法

    最近覺得數(shù)據(jù)庫(kù)中每日數(shù)據(jù)不需要都保持,只需要保留30天的,所以這篇文章給大家介紹了PostgreSQL定時(shí)清理舊數(shù)據(jù)的實(shí)現(xiàn)方法,文中通過(guò)代碼示例和圖文給大家介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-03-03
  • postgresql中的ltree類型使用方法

    postgresql中的ltree類型使用方法

    這篇文章主要給大家介紹了關(guān)于postgresql中l(wèi)tree類型使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用postgresql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 用一整天的時(shí)間安裝postgreSQL  NTFS權(quán)限

    用一整天的時(shí)間安裝postgreSQL NTFS權(quán)限

    看標(biāo)題貌似一天的收獲不小,但實(shí)際上是被一個(gè)問(wèn)題搞的要死,啥問(wèn)題?額,又是NTFS權(quán)限的問(wèn)題。
    2009-08-08
  • Windows?系統(tǒng)?PostgreSQL?手工安裝配置方法

    Windows?系統(tǒng)?PostgreSQL?手工安裝配置方法

    這篇文章主要介紹了Windows?系統(tǒng)?PostgreSQL?手工安裝配置方法,本文主要說(shuō)一下在?Windows?系統(tǒng)中安裝?PostgreSQL?的方法,我這里沒(méi)有采用?exe?安裝包的形式去安裝,EDB?發(fā)布的那個(gè)?exe?安裝包形式的對(duì)于中文環(huán)境數(shù)據(jù)庫(kù)的排序規(guī)則設(shè)定有問(wèn)題,需要的朋友可以參考下
    2022-09-09
  • 詳解如何優(yōu)化在PostgreSQL中對(duì)于日期范圍的查詢

    詳解如何優(yōu)化在PostgreSQL中對(duì)于日期范圍的查詢

    在 PostgreSQL 中,處理日期范圍的查詢是常見的操作,然而,如果不進(jìn)行適當(dāng)?shù)膬?yōu)化,這些查詢可能會(huì)導(dǎo)致性能問(wèn)題,特別是在處理大型數(shù)據(jù)集時(shí),本文章將詳細(xì)討論如何優(yōu)化在 PostgreSQL 中對(duì)于日期范圍的查詢,需要的朋友可以參考下
    2024-07-07
  • PGSQL實(shí)現(xiàn)判斷一個(gè)空值字段,并將NULL值修改為其它值

    PGSQL實(shí)現(xiàn)判斷一個(gè)空值字段,并將NULL值修改為其它值

    這篇文章主要介紹了PGSQL實(shí)現(xiàn)判斷一個(gè)空值字段,并將NULL值修改為其它值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • postgresql連續(xù)歸檔及時(shí)間點(diǎn)恢復(fù)的操作

    postgresql連續(xù)歸檔及時(shí)間點(diǎn)恢復(fù)的操作

    這篇文章主要介紹了postgresql連續(xù)歸檔及時(shí)間點(diǎn)恢復(fù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • PostgreSQL批量修改函數(shù)擁有者的操作

    PostgreSQL批量修改函數(shù)擁有者的操作

    這篇文章主要介紹了PostgreSQL批量修改函數(shù)擁有者的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • PostgreSQL數(shù)據(jù)庫(kù)實(shí)現(xiàn)公網(wǎng)遠(yuǎn)程連接的操作步驟

    PostgreSQL數(shù)據(jù)庫(kù)實(shí)現(xiàn)公網(wǎng)遠(yuǎn)程連接的操作步驟

    PostgreSQL是一個(gè)功能非常強(qiáng)大的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),本文呢將簡(jiǎn)單幾步通過(guò)cpolar 內(nèi)網(wǎng)穿透工具即可現(xiàn)實(shí)本地postgreSQL 遠(yuǎn)程訪問(wèn),需要的朋友可以參考下
    2023-09-09

最新評(píng)論