Eva*_*oll 24 arrays postgresql array-push jsonb postgresql-9.5
我使用这个在PostgreSQL中创建了一个表:
CREATE TEMP TABLE jsontesting
AS
SELECT id, jsondata::jsonb FROM ( VALUES
(1, '["abra","value","mango", "apple", "sample"]'),
(2, '["japan","china","india", "russia", "australia"]'),
(3, '["must", "match"]'),
(4, '["abra","value","true", "apple", "sample"]'),
(5, '["abra","false","mango", "apple", "sample"]'),
(6, '["string","value","mango", "apple", "sample"]'),
(7, '["must", "watch"]')
) AS t(id,jsondata);
Run Code Online (Sandbox Code Playgroud)
现在我想要的是
添加像append_to_json_array这样的东西,实际的jsondata是一个json数组,而newString是我必须添加到jsondata数组的,这个函数应该返回更新的json数组.
UPDATE jsontesting
SET jsondata=append_to_json_array(jsondata, 'newString')
WHERE id = 7;
Run Code Online (Sandbox Code Playgroud)从json数据数组中删除一个值,一个用于删除值的函数.
我试图搜索PostgreSQL的文档,但没有发现任何内容.
Eva*_*oll 55
要添加值,请使用JSON数组追加opperator(||)
UPDATE jsontesting
SET jsondata = jsondata || '["newString"]'::jsonb
WHERE id = 7;
Run Code Online (Sandbox Code Playgroud)
删除值如下所示
UPDATE jsontesting
SET jsondata = jsondata - "newString"
WHERE id = 7;
Run Code Online (Sandbox Code Playgroud)
连接到嵌套字段看起来像这样
UPDATE jsontesting
SET jsondata = jsonb_set(
jsondata::jsonb,
array['nestedfield'],
(jsondata->'nestedfield')::jsonb || '["newString"]'::jsonb)
WHERE id = 7;
Run Code Online (Sandbox Code Playgroud)
小智 12
我遇到了类似的问题,需要使用新的键值对附加到 postgres 中的现有 json 数据。我能够使用附加运算符修复此问题,|| 如下所示:
UPDATE jsontesting
SET jsondata = jsondata::jsonb || '{"add_new_data": true}'
WHERE id = 7;
Run Code Online (Sandbox Code Playgroud)
要添加到Evan Carroll的答案,您可能需要执行以下操作将列设置为空数组(如果是)NULL.||如果列是当前的,则append运算符()不执行任何操作NULL.
UPDATE jsontesting SET jsondata = (
CASE
WHEN jsondata IS NULL THEN '[]'::JSONB
ELSE jsondata
END
) || '["newString"]'::JSONB WHERE id = 7;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18719 次 |
| 最近记录: |