[英]Postgres how to sum (aggregate) all the values in a key/value 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;
(替換jsonb
與json
如果列類型是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.