/ / where句を含むpostgresql JSONB更新キー-json、postgresql

postgresql JSONBのupdateキーとwhere節 - json、postgresql

私は次の表、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}"]}");

ここで、b1の値を更新する必要がありますが、b1の現在の値が10の場合のみです(値が1の場合ではありません)。 さまざまなページを読みました(A) 新しいPostgreSQL JSONデータ型内のフィールドを変更するにはどうすればよいですか? および9.5のjsonb関数について(B) http://michael.otacoo.com/postgresql-2/postgres-9-5-feature-highlight-new-jsonb-functions/

これらの説明から理解できなかったことは、更新する必要がある正確なキーを更新するためにwhere句を統合する方法です。 Aからset関数と例を読む:

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

where句でどのように使用しますか? これは9.5でjsonb_setを使用して可能ですか? 私の現在の解決策は、データベースからjsonを取得し、プログラムでそれを変更し、新しいjsonで列を更新することです。頻繁に発生することはないので、費用はかかりません。しかし、その方法を理解できれば、よりエレガントなソリューションを好むでしょう。 どうもありがとう

回答:

回答№1は0

jsonについてはわかりませんが、jsonbは次のように変更できます。

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

bodyはjsonb colです