pgsql在嵌套一层的json格式列新增键值对
时间: 2024-09-20 09:14:21 浏览: 41
把一个json生成一个创建sql
4星 · 用户满意度95%
当你想要在PostgreSQL中的嵌套JSON格式列(如`jsonb`类型)添加新的键值对时,假设你有一个名为`table_name`的表,其中有一列叫做`nested_column`,其结构类似这样:
```json
{
"parent_key": {
"existing_value": "some value",
"another_key": "another value"
}
}
```
如果你想在这个嵌套结构中添加一个新的键值对,比如`new_key`和`new_value`,你可以使用`jsonb_set`函数。这个函数可以动态地在JSON对象或数组中插入、更新或删除项。下面是一个示例SQL查询:
```sql
UPDATE table_name
SET nested_column = jsonb_set(nested_column::jsonb, '{parent_key,"new_key"}', '"new_value"', true)
WHERE EXISTS (SELECT * FROM UNNEST(nested_column->'parent_key') AS sub_key);
```
这条命令的工作原理是:
1. `nested_column::jsonb`将`nested_column`转换为`jsonb`类型,以便于操作。
2. `jsonb_set`接受4个参数:原始JSON对象,键路径(`{parent_key,"new_key"}`),新值(`"new_value"`),以及是否允许覆盖已存在的键(true表示覆盖,false则不会替换现有键值)。
3. `EXISTS (SELECT * ...)`确保我们只在`parent_key`存在的情况下操作。
如果`new_key`不存在,那么它会被直接添加;如果存在,那么会更新它的值为`new_value`。
阅读全文