sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLを使用してNESTEDJSONB配列内のオブジェクトを削除します

    メモを編集:私は質問を誤解しました。 '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




    1. アプリケーションが起動するたびにリソースIDが変更されますか

    2. ソースが見つかりませんJARファイルmysql-connector-java-5.1.20-bin.jarにソースアタッチメントがありません

    3. JDBC接続のデフォルトのautoCommit動作

    4. sysdateでのto_date関数の問題