数组:找不到数据类型字符 varying[] 的数组类型

Array: could not find array type for data type character varying[]

我有以下示例数据用于演示:

Table:

create table tbl_array
(
   array_data varchar[]
);

一些值:

insert into tbl_array values('{AUS,USA}'),('{IND,SA}'),('{UK,UAE,NZ}'),('{CAN,BAN,SL,KW}');

查询:我有输入值 {USA,AUS}{KW,CAN,SL,BAN}{UK,UAE,NZ} 以从 tbl_array 获取详细信息。输入值可以以任何顺序出现。

预期输出

对于{USA,AUS}

array_data
-------------
{AUS,USA}

对于{KW,CAN,SL,BAN}

array_data
-------------
{CAN,BAN,SL,KW}

对于{UK,UAE,NZ}

array_data
-------------
{UK,UAE,NZ}

尝试:

select *
from tbl_array where array_data = ALL('{USA,AUS}');

出现错误:

could not find array type for data type character varying[]

试试这个:

select * from tbl_array where array_data @> '{USA,AUS}' AND array_length(array_data, 1) = 2;

它必须同时包含(忽略顺序)并且长度为 2(如果您愿意,可以排除其他情况)。

array_length(array_data, 1) 1 表示您的数组是一维的。

我还假设您的数组中没有重复项

另请注意,包含 @> 的数组可以受益于 GIN 索引。