Apa*_*ear 6 sql postgresql psycopg2 jsonb
我将以下postgresql行作为JSONB行:
{age:26}
Run Code Online (Sandbox Code Playgroud)
我想替换它,以便我看起来像这样:
{age: 30, city: "new york city"}
Run Code Online (Sandbox Code Playgroud)
我怎么能在postgressql中做到这一点?有人提到使用jsonb_set(),但我没有看到在一个查询中更新多个键的任何示例.
小智 18
在jsonb_set()中使用jsonb_set()
jsonb_set(jsonb_set('{age:26}'::jsonb,'{age}','"30"'::jsonb)::jsonb,'{city}','"new york city"'::jsonb)
Run Code Online (Sandbox Code Playgroud)
虽然你可以嵌套 jsonb_set 操作,但阅读起来却变得非常糟糕。
相反,您可以使用jsonb_object
SET my_column = my_column || jsonb_object(
array[ -- keys
'age',
'city',
'visits'
],
array[ -- values
31::text,
'Johannesburg'::text,
((my_column#>>'{visits}')::int + 1)::text -- increment
]
)
Run Code Online (Sandbox Code Playgroud)
注意:您将失去类型安全性,因为它只处理文本字段,但您可以进行部分更新(仅添加您想要更新的字段),并且如果您从另一种语言处理此问题,如果您的 SQL 抽象是不太规范
PostgreSQL 很棒。您还可以使用string concatenation operator,||
UPDATE wooden_table
SET doc = doc
|| '{"color" : "red"}'
|| '{"hardness" : "1H"}';
Run Code Online (Sandbox Code Playgroud)
此方法也适用于值侧内的 JSON 值。
| 归档时间: |
|
| 查看次数: |
3451 次 |
| 最近记录: |