postgresql 9.5 usando jsonb_set para actualizar el valor específico de la matriz jsonb
Actualmente estoy trabajando con postgreSQL 9.5 e intento actualizar un valor dentro de una matriz de un campo jsonb. Pero no puedo obtener el índice del valor seleccionado
Mi mesa solo se ve así:
CREATE TABLE samples (
id serial,
sample jsonb
);
Mi JSON se ve así:
{"result": [
{"8410": "ABNDAT", "8411": "Abnahmedatum"},
{"8410": "ABNZIT", "8411": "Abnahmezeit"},
{"8410": "FERR_R", "8411": "Ferritin"}
]}
Mi instrucción SELECT para obtener el valor correcto funciona:
SELECT
id, value
FROM
samples s, jsonb_array_elements(s.sample#>'{result}') r
WHERE
s.id = 26 and r->>'8410' = 'FERR_R';
resultados en:
id | value
----------------------------------------------
26 | {"8410": "FERR_R", "8411": "Ferritin"}
Ok, esto es lo que quería. Ahora quiero ejecutar una actualización usando la siguiente instrucción UPDATE para agregar un nuevo elemento "ratingtext" (si no está allí):
UPDATE
samples s
SET
sample = jsonb_set(sample,
'{result,2,ratingtext}',
'"Some individual text"'::jsonb,
true)
WHERE
s.id = 26;
Después de ejecutar la instrucción UPDATE, mis datos se ven así (también correctos):
{"result": [
{"8410": "ABNDAT", "8411": "Abnahmedatum"},
{"8410": "ABNZIT", "8411": "Abnahmezeit"},
{"8410": "FERR_R", "8411": "Ferritin", "ratingtext": "Some individual text"}
]}
Hasta ahora todo bien, pero yoa mano buscó el valor de índice de 2 para obtener el elemento correcto dentro de la matriz JSON. Si se cambia el orden, esto no funcionará.
Entonces mi problema:
¿Hay alguna manera de obtener el índice del elemento de matriz JSON seleccionado y combinar la instrucción SELECT y la instrucción UPDATE en una?
Al igual que:
UPDATE
samples s
SET
sample = jsonb_set(sample,
'{result,' || INDEX OF ELEMENT || ',ratingtext}',
'"Some individual text"'::jsonb,
true)
WHERE
s.id = 26;
Los valores desamples.id y"8410" son conocidos antes de preparar la declaración.
¿O no es esto posible en este momento?