如何使用postgresql的ANY在动态查询中访问多维数组

How use postgresql's ANY to access multidimensional array in dynamic query

我用多维数组调用 postgres 函数,如下所示:

SELECT get_listings(ARRAY[['name:John','grade:1'],['id:5','year:2020']]);

postgresql 函数具有以下签名:

CREATE FUNCTION get_listings(arr text[]) RETURNS TABLE 
(
    id text,
    tagz text
)

在函数内部我构造了一个循环语句:

select * from (select product_type_id, string_agg(tag, '','') as tags 
from all_tags group by product_type_id) as a 
where tags = any([0]) and tags = any([1])

赋值给变量stmt

现在我打电话给

RETURN QUERY EXECUTE stmt using arrArgs;

其中 arrArgs 之前已分配 arr

我收到这个错误:

ERROR: op ANY/ALL (array) requires array on right side

如何在 any 函数调用中访问内部数组?

PostgreSQL 具有最好和最简单的函数 unnest() 用于将数组元素扩展为一组行。例如:

SELECT unnest(array[['tagA','tagB'],['tagA','tagB']]);

Result: 

 unnest 
----------
|  tagA  |
|  tagB  |
|  tagC  |
|  tagD  |

然后您可以在 where 语句上使用任何条件。

select main.* from 
(
    SELECT unnest(array[['tagA','tagB'],['tagA','tagB']]) as array_data 
) main 
where main.array_data in ('tagA', 'tagD');

Result: 

 array_data 
--------------
|  tagA      |
|  tagD      |