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

Bagaimana cara mengubah nilai properti tunggal di dalam tipe data PostgreSQL JSONB?

Argumen ketiga dari jsonb_set() harus dari jsonb Tipe. Masalahnya adalah dalam mentransmisikan string teks ke string jsonb, Anda memerlukan string dalam tanda kutip ganda. Anda dapat menggunakan concat() atau format() :

update animal
set info = 
    jsonb_set(info, '{location}', concat('"', lower(info->>'location'), '"')::jsonb, true) 
--  jsonb_set(info, '{location}', format('"%s"', lower(info->>'location'))::jsonb, true) 
where id='49493'
returning *;

  id   |                               info                               
-------+------------------------------------------------------------------
 49493 | {"habit1": "fly", "habit2": "dive", "location": "sonoma narite"}
(1 row)

Di Postgres 9.4 Anda harus menghapus kolom json menggunakan jsonb_each_text(), kunci agregat dan nilai memodifikasi nilai yang tepat dengan cepat, dan akhirnya membangun objek json:

update animal a
set info = u.info
from (
    select id, json_object(
        array_agg(key), 
        array_agg(
            case key when 'location' then lower(value)
            else value end))::jsonb as info
    from animal,
    lateral jsonb_each_text(info) 
    group by 1
    ) u
where u.id = a.id
and a.id = 49493;

Jika Anda dapat membuat fungsi, solusi ini mungkin lebih menyenangkan:

create or replace function update_info(info jsonb)
returns jsonb language sql as $$
    select json_object(
        array_agg(key), 
        array_agg(
            case key when 'location' then lower(value)
            else value end))::jsonb
    from jsonb_each_text(info)
$$

update animal
set info = update_info(info)
where id = 49493;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Koneksi Postgres ditolak dari kartrid Openshift Tomcat 7

  2. Disebabkan oleh:org.hibernate.MappingException:Kolom berulang dalam pemetaan untuk entitas

  3. Bagaimana cara memeriksa apakah lat long berada di batas kota

  4. Bagaimana cara mendapatkan bidang kunci untuk tabel dalam fungsi plpgsql?

  5. Pertanyaan PostgreSQL Favorit Saya dan Mengapa Itu Penting