/ / postgresql Klucz aktualizacji JSONB z klauzulą ​​where - json, postgresql

postgresql klucz aktualizacji JSONB z klauzulą ​​where - json, postgresql

Mam następującą tabelę, 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 muszę zaktualizować wartość b1, ale tylko wtedy, gdy bieżąca wartość b1 wynosi 10 (nie, gdy wartość wynosi 1). Przeczytałem różne strony (A) Jak zmodyfikować pola w nowym typie danych PostgreSQL JSON? oraz o funkcji jsonb w 9.5 (B) http://michael.otacoo.com/postgresql-2/postgres-9-5-feature-highlight-new-jsonb-functions/

Z tych wyjaśnień nie zrozumiałem, w jaki sposób zintegrowałem klauzulę where, aby zaktualizować dokładny klucz, który muszę zaktualizować. odczytanie z funkcji A zestawu i przykładów:

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$;

Jak korzystać z klauzuli where? czy będzie to możliwe w wersji 9.5 przy użyciu jsonb_set? moim obecnym rozwiązaniem jest pobranie jsona z bazy danych, zmodyfikowanie go w moim programie i zaktualizowanie kolumny nowym jsonem. Nie zdarza się to często, więc nie kosztuje dużo. Ale wolałbym bardziej eleganckie rozwiązanie, jeśli rozumiem, jak to zrobić wielkie dzięki

Odpowiedzi:

0 dla odpowiedzi № 1

Nie jestem pewien co do json, ale możesz zmodyfikować jsonb w ten sposób;

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

gdzie body to jsonb col