VastbaseG100

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

Menu

JSONB_OBJECT

功能描述

Vastbase在PostgreSQL兼容模式下支持JSONB_OBJECT函数,用于从一个文本数组构建一个JSONB对象,或者从两个分别作为键和值的数组构建一个JSONB对象。

其中文本数组可以是具有偶数个成员的一维数组(成员被当做交替出现的键/值对),或者是一个二维数组(每一个内部数组刚好有偶数个元素,则每 2 个元素可以被看做是键/值对)。

注意事项

  • 该功能仅在数据库兼容模式为PostgreSQL时支持(即数据库实例初始化时指定DBCOMPATIBILITY='PG')。

  • 入参数组维度必须合理,且键不可为null,否则函数报错。

  • 两个数组参数形式中的键数组和值数组必须具有相同数量的元素, 否则函数报错。

语法格式

JSONB_OBJECT函数有两个重载函数:

  • 当入参为一个文本数组的时候,其数组长度必须为偶数,成员被当做交替出现的键/值对,键不可为null,返回类型为jsonb。

    jsonb_object(kv_array)
    
  • 当入参为两个文本数组的时候,第一个数组认为是键,第二个认为是值,两个数组长度必须相等,键不可为null,返回类型为jsonb。

    jsonb_object(k_array, v_array)
    

参数说明

  • kv_array

    一个文本数组。

    • 可以是一个一维数组,必须由偶数个元素,且由交替的作为键和值的元素组成。

    • 也可以是一个二维数组,且每个内部数组必须具有两个元素,作为键和值。

  • k_array

    一个包含了键的文本数组。其中的元素和值数组中的元素一一对应组成键值对。

  • v_array

    一个包含了值的文本数组。其中的元素和键数组中的元素一一对应组成键值对。

示例

示例1: 指定字符数组类型。

select jsonb_object('{1,2,a,b}'::char[]) ;
select jsonb_object('{abcd,efg,a4a,@3$}'::varchar[]) ;

返回结果为如下,第一个查询语句中1和a被用作键,2和b被用作值;第二个查询语句中abcd和a4a被用作键,efg和@3$被用作值:

     jsonb_object
----------------------
 {"1": "2", "a": "b"}
(1 row)

         jsonb_object
-------------------------------
 {"a4a": "@3$", "abcd": "efg"}
(1 row)

示例2: 在测试表中设置列默认值为JSONB_OBJECT函数输出值。

1、创建测试表,为列指定默认值。

create table tb1_1164188(a1 int[] primary key,a2 jsonb not null,a3 jsonb default jsonb_object('{id}','{00001111}'),a4 date[] unique,a5 int check (a5>5),a6 text[],a7 text[]);
create table tb2_1164188(a1 int primary key,a2 jsonb default jsonb_object('{id,name}','{00001111,lili}'),a3 date); 

2、为测试表插入数据。

insert into tb1_1164188 values('{1,2}','"a"',default,'{2022-12-12,2022-12-12}',7,'{1,2,3,4,5}','{a,b,c,d,e}');
insert into tb2_1164188(a1) select generate_series(4,9);

3、查询测试表的数据。

select * from tb1_1164188;
select * from tb2_1164188;

返回结果为如下:

  a1   | a2  |         a3         |           a4            | a5 |     a6      |     a7
-------+-----+--------------------+-------------------------+----+-------------+-------------
 {1,2} | "a" | {"id": "00001111"} | {2022-12-12,2022-12-12} |  7 | {1,2,3,4,5} | {a,b,c,d,e}
(1 row)

 a1 |                 a2                 | a3
----+------------------------------------+----
  4 | {"id": "00001111", "name": "lili"} |
  5 | {"id": "00001111", "name": "lili"} |
  6 | {"id": "00001111", "name": "lili"} |
  7 | {"id": "00001111", "name": "lili"} |
  8 | {"id": "00001111", "name": "lili"} |
  9 | {"id": "00001111", "name": "lili"} |
(6 rows)