PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm cách nào để cập nhật đối tượng JSON lồng nhau sâu dựa trên tiêu chí bộ lọc trong Postgres?

Nếu bạn đã quen với JavaScript, bạn sẽ sẵn lòng cài đặt và sử dụng Ngôn ngữ thủ tục JavaScript plv8. Tiện ích mở rộng này cho phép bạn sửa đổi các giá trị json nguyên bản, ví dụ:

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);

Đối với người dùng MS Windows: sẵn sàng cài đặt các tệp nhị phân của Windows.

Giải pháp thay thế plpgsql sử dụng loại 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL \ lo_import và cách lấy OID kết quả vào lệnh UPDATE?

  2. node-postgres có hỗ trợ nhiều tập kết quả không

  3. Giá trị NULL của hàm Postgres cho hàng tham chiếu MỚI

  4. Làm thế nào để sửa lỗi 'PHP' tạo, trong Mac OS X (10.9.4)?

  5. Sử dụng các giá trị tham số cho lược đồ và bảng trong Postgresql