【问题标题】:Store and update jsonb value in Postgres在 Postgres 中存储和更新 jsonb 值
【发布时间】:2019-08-13 03:05:42
【问题描述】:

我有一张桌子,例如:

ID | Details
1  | {"name": "my_name", "phone": "1234", "address": "my address"}
2  | {"name": "his_name", "phone": "4321", "address": "his address"}

在此,Details 是一个 jsonb 对象。我想向 jsonb 添加另一个名为 'tags' 的字段,它应该有一些特定的键。在这种情况下,“姓名”、“电话”。查询执行后的最终状态应该是:

 ID | Details
 1  | {"tags": {"name": "my_name", "phone": "1234"},"name": "my_name", "phone": "1234", "address":"my address"}
 2  | {"tags": {"name": "his_name", "phone": "4321"},"name": "his_name", "phone": "4321", "address":"his address"}

我可以想到以下步骤来完成这项工作:

  • 遍历每一行并提取变量中的 details["name"] 和 details["phone"]。
  • 将这些变量添加到 jsonb。

我想不出相应的 postgres 查询应该是怎样的。请指导。

【问题讨论】:

    标签: postgresql jsonb


    【解决方案1】:

    使用jsonb_build_object

    update t set details 
                   = jsonb_build_object ( 'tags',
                jsonb_build_object( 'name', details->>'name', 'phone',details->>'phone')
                      ) 
    || details
    

    DEMO

    【讨论】:

      【解决方案2】:

      当然要使用连接运算符!

      https://www.postgresql.org/docs/current/functions-json.html

      update t1 set details = details || '{"tags": {"name": "my_name"}}' where id = 1
      

      【讨论】:

        【解决方案3】:

        您可以提取您感兴趣的键,构建一个新的 json 值并将其附加到列中:

        update the_table
          set details = details || jsonb_build_object('tags', 
                                       jsonb_build_object('name', details -> 'name', 
                                                          'phone', details -> 'phone'));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-08-07
          • 1970-01-01
          • 2015-10-06
          • 1970-01-01
          • 1970-01-01
          • 2020-04-20
          • 2023-01-29
          • 1970-01-01
          相关资源
          最近更新 更多