PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Postgres/JSON - perbarui semua elemen array

Tidak ada fungsi standar untuk memperbarui elemen larik json dengan kunci. Fungsi khusus mungkin adalah cara paling sederhana untuk memecahkan masalah:

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)

Permintaan Anda mungkin terlihat seperti ini:

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. Hasil pengembalian PostgreSQL ditetapkan sebagai array JSON?

  2. kesalahan pernyataan sql:kolom .. tidak ada

  3. Apa yang Harus Diperiksa jika Pemanfaatan Memori PostgreSQL Tinggi

  4. Bagaimana cara menyesuaikan file konfigurasi gambar Docker PostgreSQL resmi?

  5. Masukkan pemicu untuk Perbarui tabel lain menggunakan PostgreSQL