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

Postgresのフィルター基準に基づいて深くネストされたJSONオブジェクトを更新するにはどうすればよいですか?

    JavaScriptに精通している場合は、JavaScript手続き型言語plv8をインストールして使用できます。 この拡張機能を使用すると、json値をネイティブに変更できます。例:

    create extension if not exists plv8;
    
    create or replace function update_mapping_v8(data json)
    returns json language plv8 as $$
        var len = data['mapping'].length;
        for (var i = 0; i < len; i++) {
            var o = data['mapping'][i];
            if (o.src == 'up' && o.dest == 'down') {
                o.rule_names = 'some name'
            }
        }
        return data;
    $$;
    
    update mapping_transform
    set content_json = update_mapping_v8(content_json);
    

    MS Windowsユーザーの場合:Windowsバイナリをインストールする準備ができました。

    plpgsqlの代替ソリューションはjsonbタイプを使用します:

    create or replace function update_mapping_plpgsql(data jsonb)
    returns json language plpgsql as $$
    declare
        r record;
    begin
        for r in
            select value, ordinality- 1 as pos
            from jsonb_array_elements(data->'mapping') with ordinality
            where value->>'src' = 'up' and value->>'dest' = 'down'
        loop
            data = jsonb_set(
                data,
                array['mapping', r.pos::text],
                r.value || '{"rule_names": "some name"}'
                );
        end loop;
        return data;
    end $$;
    
    update mapping_transform
    set content_json = update_mapping_plpgsql(content_json::jsonb);
    


    1. すべてのアクティビティの開始後に表示されるSQLiteConstraintExceptionエラー

    2. ユーザーがMysqlでSSLを必要としているかどうかを確認するにはどうすればよいですか?

    3. HTMLフォームから任意の数のレコードをPOSTする

    4. 既存のRailsアプリをherokuに移動するにはどうすればよいですか? (sqliteからpostgresへ)