簡體   English   中英

Postgres:如何更改數組中每個元素的 jsonb 值類型?

[英]Postgres: How to alter jsonb value type for each element in an array?

我在 Postgres 10.12 中有一個名為items的 jsonb 列,如下所示:

{
    "items": [
        {
            "itemQty": 2,
            "itemName": "snake"
        },
        {
            "itemQty": 1,
            "itemName": "x kodiyum"
        }
    ]
}

現在我想將每個數組元素的itemQty類型轉換為字符串,以便新值如下所示:

{
    "items": [
        {
            "itemQty": "2",
            "itemName": "snake"
        },
        {
            "itemQty": "1",
            "itemName": "x kodiyum"
        }
    ]
}

我該怎么做呢? 我已經瀏覽了 Postgres jsonb 的文檔,但無法弄清楚。

On the server-side, I am using Spring boot and Hibernate with com.vladmihalcea.hibernate.type.json (Hibernate Types 52) if it helps.

謝謝

您可以取消嵌套數組,修改元素,然后重新構建它。 假設您的表的主鍵是id ,那就是:

select jsonb_build_object(
    'items', jsonb_agg(
        jsonb_build_object(
            'itemQty',  (x.obj ->> 'itemQty')::text,
            'itemName', x.obj ->> 'Name'
        )
    ) 
    )new_items
from mytable t
cross join lateral jsonb_array_elements(t.items -> 'items') as x(obj)
group by id

請注意,這里並不真正需要顯式轉換為::text ,因為->>無論如何都提取文本值:我保留它是因為它使意圖更清晰。

如果您想要update聲明:

update mytable t
set items = (
    select jsonb_build_object(
        'items', jsonb_agg(
            jsonb_build_object(
                'itemQty',  (x.obj ->> 'itemQty')::text,
                'itemName', x.obj ->> 'Name'
            )
        ) 
    )
    from jsonb_array_elements(t.items -> 'items') as x(obj)
)

DB Fiddle 上的演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM