目前我正在使用postgreSQL 9.5并尝试更新jsonb字段数组中的值.但我无法获得所选值的索引
我的表看起来像:
CREATE TABLE samples (
id serial,
sample jsonb
);
Run Code Online (Sandbox Code Playgroud)
我的JSON看起来像:
{"result": [
{"8410": "ABNDAT", "8411": "Abnahmedatum"},
{"8410": "ABNZIT", "8411": "Abnahmezeit"},
{"8410": "FERR_R", "8411": "Ferritin"}
]}
Run Code Online (Sandbox Code Playgroud)
我的SELECT语句可以获得正确的值:
SELECT
id, value
FROM
samples s, jsonb_array_elements(s.sample#>'{result}') r
WHERE
s.id = 26 and r->>'8410' = 'FERR_R';
Run Code Online (Sandbox Code Playgroud)
结果是:
id | value
----------------------------------------------
26 | {"8410": "FERR_R", "8411": "Ferritin"}
Run Code Online (Sandbox Code Playgroud)
好的,这就是我想要的.现在我想使用以下UPDATE语句执行更新以添加新元素"ratingtext"(如果尚未存在):
UPDATE
samples s
SET
sample = jsonb_set(sample,
'{result,2,ratingtext}',
'"Some individual text"'::jsonb,
true)
WHERE
s.id = 26;
Run Code Online (Sandbox Code Playgroud)
执行UPDATE语句后,我的数据看起来像这样(也正确):
{"result": [
{"8410": "ABNDAT", "8411": "Abnahmedatum"}, …Run Code Online (Sandbox Code Playgroud)