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)