Postgres 10.12에는 다음과 같이 항목 이라는 jsonb 열 이 있습니다.
{
"items": [
{
"itemQty": 2,
"itemName": "snake"
},
{
"itemQty": 1,
"itemName": "x kodiyum"
}
]
}
이제 모든 배열 요소에 대해 itemQty 유형을 문자열 로 변환 하여 새 값이 다음과 같이되도록합니다.
{
"items": [
{
"itemQty": "2",
"itemName": "snake"
},
{
"itemQty": "1",
"itemName": "x kodiyum"
}
]
}
어떻게해야합니까? Postgres jsonb에 대한 문서를 검토했지만 알아낼 수 없었습니다.
서버 측에서는 도움이된다면 com.vladmihalcea.hibernate.type.json (Hibernate Types 52)과 함께 Spring boot 및 Hibernate를 사용하고 있습니다.
감사
배열의 중첩을 해제하고 요소를 수정 한 다음 다시 빌드 할 수 있습니다. 테이블의 기본 키가라고 가정하면 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)
)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다