Sql 如何为所有记录更改Postgres中存储的JSON对象中的键的名称
在一个名为Sql 如何为所有记录更改Postgres中存储的JSON对象中的键的名称,sql,postgresql,Sql,Postgresql,在一个名为priceTables的表中,我在一个名为value的列中存储了一个JSON对象,它看起来类似于以下内容: { “价格”:{ “价值观”:{ “税”:1.59 } } } 并希望运行一个查询来迁移成千上万条记录,以将值的名称更改为细分。因此,它将导致 { “价格”:{ “细分”:{ “税”:1.59 } } } 如果名称在JSON中只能出现一次,或者如果出现的次数更多,则应替换所有出现的名称,那么在文本中,一个快速且脏的名称是一个简单的replace(): UPDATE elbat
priceTables
的表中,我在一个名为value
的列中存储了一个JSON对象,它看起来类似于以下内容:
{
“价格”:{
“价值观”:{
“税”:1.59
}
}
}
并希望运行一个查询来迁移成千上万条记录,以将值的名称更改为细分
。因此,它将导致
{
“价格”:{
“细分”:{
“税”:1.59
}
}
}
如果名称在JSON中只能出现一次,或者如果出现的次数更多,则应替换所有出现的名称,那么在文本中,一个快速且脏的名称是一个简单的replace()
:
UPDATE elbat
SET value = replace(value::text, '"values"', '"breakdown"')::jsonb;
(如果列的类型是json
而不是jsonb
,则将jsonb
替换为json
)如果名称在json中只能出现一次,或者如果出现的次数较多,则应将所有出现的名称替换为json
,则在文本中,快速且不干净的替换是一个简单的Replace()
:
UPDATE elbat
SET value = replace(value::text, '"values"', '"breakdown"')::jsonb;
(如果列的类型是json
而不是jsonb
,则将jsonb
替换为json
)这应该有效
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;
这应该行得通
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;