メモを編集:私は質問を誤解しました。 'RO'を含むオブジェクト全体を削除したいと思いました。 IDを削除するためだけに回答を編集しました。
指定した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オブジェクトはフィールド「field」にあります。
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
よろしくお願いいたします。
Bjarni