/ / postgresql Aktualizačný kľúč JSONB s klauzulkou where - json, postgresql

postgresql aktualizačný kľúč JSONB s klauzulou kde - json, postgresql

Mám nasledujúcu tabuľku, postgresql 9.4

  create table test( id serial, data json);
insert into test (data) values ("{"a":1, "b":["{"b1":1,"b2":2},{"b1":10,"b2":20}"]}");

Teraz potrebujem aktualizovať hodnotu b1, ale iba v prípade, že aktuálna hodnota b1 je 10 (nie keď je hodnota 1). Prečítal som rôzne stránky (A) Ako upravím polia v novom dátovom type PostgreSQL JSON? ao funkcii jsonb v 9,5 (B) http://michael.otacoo.com/postgresql-2/postgres-9-5-feature-highlight-new-jsonb-functions/

Z týchto vysvetlení som nepochopil, ako integrujem svoju klauzulu where, takže aktualizuje presný kľúč, ktorý potrebujem aktualizovať. čítanie z funkcie množiny a príklady:

CREATE OR REPLACE FUNCTION "json_object_set_key"(
"json"          json,
"key_to_set"    TEXT,
"value_to_set"  anyelement
)
RETURNS json
LANGUAGE sql
IMMUTABLE
STRICT
AS $function$
SELECT concat("{", string_agg(to_json("key") || ":" || "value", ","), "}")::json
FROM (SELECT *
FROM json_each("json")
WHERE "key" <> "key_to_set"
UNION ALL
SELECT "key_to_set", to_json("value_to_set")) AS "fields"
$function$;

Ako ich môžem použiť s klauzulou where? Bude to možné za 9,5 pomocou jsonb_set? mojím súčasným riešením je získať json z databázy, upraviť ho v mojom programe a aktualizovať stĺpec novým json. Nestane sa to často, takže to nestojí veľa. Ale ja by som radšej elegantnejšie riešenie, ak môžem pochopiť, ako to urobiť mnohokrat dakujem

odpovede:

0 pre odpoveď č. 1

Nie som si istý / -á o json, ale môžete jsonb takto upraviť;

update objects set body=jsonb_set(body, "{name}", ""Mary"", true) where id=1;

kde je telo jsonb col