POstgreSQL ネストしたキーの値の更新

先日書いた PostgreSQL JSON の部分的更新 - Oboe吹きプログラマの黙示録
この方法では、ネストしたキーを指定して一部を更新することができない。
例)

{
   "task": {
             "name": "A",
             "order" : 10,
             "limit" : "2023-12-09"
    } 
}

このようなJSONに対して、'task'->'name' の値だけを変更するには、jsonb_set 関数を使う。

 jsonb_set( 対象, カンマ区切りのpath, 変更値, [boolean] )

テーブル jbooks のカラム jdata が上のJSONデータであった時、

UPDATE jbooks SET 
jdata = jsonb_set(jdata, '{task,name}', '"B"')
WHERE id = 3

で 'task'->'name' の値だけを変更する。
path は、{ } で括り、key は、" ダブルクォーテーションで括る。ことに注意、
値が文字列の場合は、ダブルクォーテーションで括る

jsonb_set の第3引数 boolean は、
 true = キーが存在しなければ、あたらしく指定したキーで値を追加する。
 false = キーが存在しなければ、無視する。
デフォルトは、true である。