VastbaseG100

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

Menu

JSONB_BUILD_ARRAY

功能描述

Vastbase在PostgreSQL兼容模式下支持JSONB_BUILD_ARRAY函数,用于从可变的参数列表中创建一个可能是异构类型的 JSONB 数组并返回。本函数与JSON_BUBILD_ARRAY函数功能类似。

JSONB_BUILD_ARRAY函数接受任意个数的参数作为数组的元素,可以是各种数据类型,包括标量值、JSONB对象、JSONB数组等,将传入的参数按照顺序构建成一个JSONB数组。

注意事项

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

  • 若入参可为空,则返回空。

  • 入参为any可变参数列表时,key值必须是标量,而不是数组,复合值或者json。

语法格式

jsonb_build_array(any_value)

参数说明

any_value

是一个可变的参数列表,可以传入任意类型的任意数量的参数。

示例

示例1:函数入参为空和NULL、多个值。

select jsonb_build_array();
select jsonb_build_array(null);
select jsonb_build_array('language',1,'1023-12-13','中文','101','90');

返回结果为如下:

 jsonb_build_array
-------------------
 []
(1 row)

 jsonb_build_array
-------------------
 [null]
(1 row)

                 jsonb_build_array
----------------------------------------------------
 ["language", 1, "1023-12-13", "中文", "101", "90"]
(1 row)

示例2: 在查询行存表时使用JSONB_BUILD_ARRAY函数。

1、创建创建数据类型和测试表。

create type tp1_1162116 is varray(5) of int;
create type tp2_1162116 is table of char(8);
create type tp3_1162116 as(a int,b char(8));
create table tab_1162116(a1 int primary key,a2 jsonb not null,a3 jsonb default jsonb_build_array('name','AAA'),a4 date unique,a5 int check (a5>5),a8 tp3_1162116);
create table tt_1162116(a1 int primary key,a2 jsonb default jsonb_build_array('name','AAA'),a3 date);

2、向测试表中插入数据,并查看

insert into tt_1162116(a1) select generate_series(1,6);
insert into tab_1162116 values(1,'"a"',default,'2022-12-12',7,(1,'a'));
insert into tab_1162116 values(2,jsonb_build_array('operate','insert'),default,'2022-12-13',8,(1,'a'));
insert into tab_1162116 values(3,jsonb_build_array('operate','insert'),jsonb_build_array('operate','insert'),'2022-12-14',9,(1,'a'));
select * from tab_1162116 order by a1;
select * from tt_1162116 order by a1;

返回结果为如下:

 a1 |          a2           |          a3           |     a4     | a5 |       a8
----+-----------------------+-----------------------+------------+----+----------------
  1 | "a"                   | ["name", "AAA"]       | 2022-12-12 |  7 | (1,"a       ")
  2 | ["operate", "insert"] | ["name", "AAA"]       | 2022-12-13 |  8 | (1,"a       ")
  3 | ["operate", "insert"] | ["operate", "insert"] | 2022-12-14 |  9 | (1,"a       ")
(3 rows)

 a1 |       a2        | a3
----+-----------------+----
  1 | ["name", "AAA"] |
  2 | ["name", "AAA"] |
  3 | ["name", "AAA"] |
  4 | ["name", "AAA"] |
  5 | ["name", "AAA"] |
  6 | ["name", "AAA"] |
(6 rows)

3、更新测试表中的数据。

insert into tab_1162116 values(2,'"b"',default,'2022-12-15',10,(1,'a')) on duplicate key update a3=jsonb_build_array('operate','upsert');
insert into tab_1162116 values(4,'"d"',default,'2022-12-16',11,(1,'a')) on duplicate key update a3=jsonb_build_array('operate','upsert');
select * from tab_1162116 order by a1;

返回结果为如下:

 a1 |          a2           |          a3           |     a4     | a5 |       a8
----+-----------------------+-----------------------+------------+----+----------------
  1 | "a"                   | ["name", "AAA"]       | 2022-12-12 |  7 | (1,"a       ")
  2 | ["operate", "insert"] | ["operate", "upsert"] | 2022-12-13 |  8 | (1,"a       ")
  3 | ["operate", "insert"] | ["operate", "insert"] | 2022-12-14 |  9 | (1,"a       ")
  4 | "d"                   | ["name", "AAA"]       | 2022-12-16 | 11 | (1,"a       ")
(4 rows)