繁体   English   中英

如何更改存储在 Postgres 中的所有记录的 JSON 对象中的键名

[英]How to change the name of a key in a JSON object stored in Postgres for all records

在名为priceTables的表中,我在名为value的列中存储了一个 JSON 对象,该对象类似于以下内容:

{
  "price": {
    "values": {
       "tax": 1.59
     }
  }
}

并且想运行一个查询来迁移数以万计的记录以将values的名称更改为breakdown 所以会导致

{
  "price": {
    "breakdown": {
      "tax": 1.59
    }
  }
}

关于实现这一点的 Postgres 查询有什么建议吗?

如果名称只能在 JSON 中出现一次,或者如果出现更多,则所有出现的地方都应该被替换,一个快速而肮脏的方法是文本中的简单replace()

UPDATE elbat
       SET value = replace(value::text, '"values"', '"breakdown"')::jsonb;

(替换jsonbjson如果列类型是json而非jsonb 。)

这应该有效。

UPDATE priceTables
SET value = value || jsonb_build_object(
  'price',
  jsonb_build_object(
    'breakdown',
    priceTables.value #> '{price,values}'
  )
)
WHERE priceTables.value #> '{price,values}' IS NOT NULL;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM