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

Postgres / JSON - cập nhật tất cả các phần tử mảng

Không có hàm tiêu chuẩn nào để cập nhật các phần tử mảng json bằng khóa. Một hàm tùy chỉnh có lẽ là cách đơn giản nhất để giải quyết vấn đề:

create or replace function update_array_elements(arr jsonb, key text, value jsonb)
returns jsonb language sql as $$
    select jsonb_agg(jsonb_build_object(k, case when k <> key then v else value end))
    from jsonb_array_elements(arr) e(e), 
    lateral jsonb_each(e) p(k, v)
$$;

select update_array_elements('[{"bar":true},{"bar":true}]'::jsonb, 'bar', 'false');

      update_array_elements
----------------------------------
 [{"bar": false}, {"bar": false}]
(1 row)

Truy vấn của bạn có thể giống như sau:

with a_data(js) as (
values(
    '{
        "foo": [
          {
            "bar": true
          },
          {
            "bar": true
          }
        ]
    }'::jsonb)
)
select
    jsonb_set(js, '{foo}', update_array_elements(js->'foo', 'bar', 'false'))
    from a_data;

                 jsonb_set                 
-------------------------------------------
 {"foo": [{"bar": false}, {"bar": false}]}
(1 row)     


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để thử nhiều lần CHỌN cho đến khi có kết quả?

  2. Chiến lược hiệu quả để để lại dấu vết kiểm tra / lịch sử thay đổi cho các ứng dụng DB?

  3. Làm thế nào để truy vấn giá trị null trong trường json loại postgresql?

  4. Phát triển PostgreSQL cho Windows, Phần 1

  5. Pandas cập nhật sql