Sunting catatan:Saya salah mengerti pertanyaannya. Pikir Anda ingin menghapus seluruh objek yang mengandung 'RO'. Saya mengedit jawabannya sehingga hanya untuk menghapus id.
Ada kesalahan kecil pada objek jsonb yang Anda berikan. Mungkin akan terlihat seperti ini:
{
"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"
}]
}
]
}
}
Dengan demikian, ini akan berfungsi, tetapi perlu diingat - ini akan menggantikan semua entri di tabel kerja. Objek jsonb berada di bidang "bidang".
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
Hormat kami,
Bjarni