VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

JSONB_SET

功能描述

Vastbase支持JSONB_SET函数,可以替换指定路径上的值或者在指定的路径上插入值。

函数返回给定的JSONB值,其中指定的路径被新值替换,或者 create_missing 为true(默认值) 时添加新的值。

注意事项

  • 仅V2.2 Build 10(Patch No.10)及以上补丁版本支持该特性。
  • 路径中的所有前值都必须存在,否则将不加改变地返回target。
  • 出现在路径中的负整数从从JSON数组的path末尾开始计数。
  • 如果最后一个路径步骤是超出范围的数组索引,并且create_missing为真,则新值将添加到数组的开头(如果索引为负),或添加到数组的结尾(如果索引为正)。

语法格式

jsonb_set(target jsonb, path text[], new_value jsonb[, create_missing boolean]) -> JSONB

参数说明

  • target

    要插入新值的 JSONB 值。

  • path

    一个文本数组,指示了新值插入的位置。数组中靠前的路径,应该包含数组中靠后的路径。

  • new_value

    要插入的新值。

  • create_missing

    指示如果指定的路径不存在时是否添加指定的新值。缺省值为true。

    若create_missing为true,且通过path指定部分不存在,则添加new_value。

示例

示例1 : create_missing为false且通过path指定部分不存在时,不添加new_value。

select jsonb_set('[{"f1":1,"f2":null},{"2":9},{"null":90},{"3":87}]', '{1,aa}', '[2,3,4]', false);

返回结果为如下,未添加new_value:

                         jsonb_set
------------------------------------------------------------
 [{"f1": 1, "f2": null}, {"2": 9}, {"null": 90}, {"3": 87}]
(1 row)

示例2 : create_missing为true(缺省)且通过path指定部分不存在时,添加new_value。

  • 索引为正数时:

    select jsonb_set('[{"f1":1,"f2":null},{"2":9},{"null":90},{"3":87}]', '{1,aa}', '[2,3,4]');
    

    返回结果为如下,在数组结尾添加new_value:

                                  jsonb_set
    -----------------------------------------------------------------------------
    [{"f1": 1, "f2": null}, {"2": 9, "aa": [2, 3, 4]}, {"null": 90}, {"3": 87}]
    (1 row)
    
  • 在数组的指定位置中插入了新值:

    select jsonb_set('[{"f1":1,"f2":null},{"2":9},{"null":90},{"3":87}]', '{-4,bb}', '[2,3,4]');
    

    返回结果为如下,在数组开头添加new_value:

                                  jsonb_set
    -----------------------------------------------------------------------------
    [{"bb": [2, 3, 4], "f1": 1, "f2": null}, {"2": 9}, {"null": 90}, {"3": 87}]
    (1 row)