नोट संपादित करें:मैंने प्रश्न को गलत समझा। सोचा था कि आप 'आरओ' वाली पूरी वस्तु को हटाना चाहते हैं। मैंने सिर्फ आईडी को हटाने के लिए उत्तर संपादित किया।
आपके द्वारा प्रदान किए गए jsonb ऑब्जेक्ट में एक छोटी सी त्रुटि है। यह शायद इस तरह दिखना चाहिए:
{
"x1": "Americas",
"x2": "West",
"x3": [{
"x_id": "sam"
}],
"x4": {
"a1": true,
"a2": false,
"a3": [
"xx",
"xx"
],
"a4": [
"Josh"
],
"y1": [{
"id": "RW",
"z2": true,
"z3": "USER",
"z4": [{
"name": "john"
}]
},
{
"id": "RO",
"z2": false,
"z3": "SELECT",
"z4": [{
"name": "salin"
}]
},
{
"id": "DBA",
"z2": false,
"z3": "SELECT",
"z4": [{
"name": "Samule"
}]
}
]
}
}
इसके साथ ही, यह काम करना चाहिए, लेकिन ध्यान रखें - यह कार्य तालिका में सभी प्रविष्टियों को बदल देगा। jsonb ऑब्जेक्ट "फ़ील्ड" फ़ील्ड में हैं।
with zd as (select ('{x4,y1,'||index-1||',id}')::text[] as path
from table
,jsonb_array_elements((field->>'x4')::jsonb->'y1')
with ordinality arr(x,index)
where x->>'id'='RO'
)
update table set field=
field #- zd.path
from zd
सादर,
बजर्नी