pgsql在json格式列新增键值对,且值为数组
时间: 2024-09-21 13:03:38 浏览: 46
postgres-json:在 PostgreSQL 中存储和查询 JSON 文档
在 PostgreSQL 中,如果你想在 JSON 格式的数据列上新增键值对,并且值是一个数组,可以使用 `jsonb_set` 或者 `jsonb_object_agg` 函数。这里假设你的表名为 `your_table`,JSONB类型的列名是 `your_json_column`。
1. 使用 `jsonb_set`:
```sql
UPDATE your_table
SET your_json_column = jsonb_set(your_json_column, '{new_key}', '[element1, element2]', true)
WHERE condition_to_apply;
```
这里的 `true` 表示如果键不存在则添加新键,`false` 则不会创建新键(默认)。将 `element1, element2` 替换为你想要添加的具体元素。
2. 如果你想将所有满足条件的记录的某个键的值设置成一个数组,可以先提取该键,然后插入一个新的数组:
```sql
WITH new_array AS (
SELECT array_agg(jsonb_data ->> 'old_key') as old_keys
FROM your_table
WHERE condition_for_array
)
UPDATE your_table
SET your_json_column = jsonb_set(your_json_column, '{"new_key": :new_array}', :new_array, true)
FROM new_array
WHERE your_table.some_id = new_array.some_id;
```
在这段查询中,`jsonb_data ->> 'old_key'` 获取旧的键值,`array_agg` 合并成一个数组,然后通过 `jsonb_set` 添加到新的 JSONB 对象中。
阅读全文