簡體   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