在名为的表中,priceTables我存储在名为valueJSON 对象的列中,该对象看起来类似于以下内容:
{
"price": {
"values": {
"tax": 1.59
}
}
}
Run Code Online (Sandbox Code Playgroud)
并希望运行查询来迁移数万条记录以将名称更改values为breakdown。所以这会导致
{
"price": {
"breakdown": {
"tax": 1.59
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于实现此目的的 Postgres 查询有什么建议吗?
如果名称在 JSON 中只能出现一次,或者如果出现多次,则所有出现的地方都应该被替换,那么快速而肮脏的名称replace()在文本中很简单:
UPDATE elbat
SET value = replace(value::text, '"values"', '"breakdown"')::jsonb;
Run Code Online (Sandbox Code Playgroud)
(如果列的类型不是 ,则替换为jsonb。)jsonjsonjsonb
这应该有效。
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;
Run Code Online (Sandbox Code Playgroud)
用于重命名 JSONB 列中的二级键的通用版本:
UPDATE my_table
SET json_column = json_column || jsonb_build_object(
'level_1_key',
jsonb_build_object(
'level_2_key_renamed',
json_col #> '{level_1_key,level_2_key}'
)
)
WHERE my_table.json_col #> '{level_1_key,level_2_key}' IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4083 次 |
| 最近记录: |