如何参数化对 jsonb 数组包含的搜索?

How do I parameterize a search for jsonb array contains?

我有 colA,它是一个带有数组的 jsonb 列。以下是一些示例行:

["postgresql", "mysql", "elasticsearch"]
["python", "perl"]

我正在尝试搜索数组是否具有 "postgresql" 或 "mysql":

SELECT 'colA @> ANY (ARRAY ['["postgresql"]', '["mysql"]']::jsonb[])' FROM mytable

即returns第一行。现在,由于用户将传递数据,因此我需要参数化查询:

SELECT 'colA @> ANY (ARRAY ['[]', '[]']::jsonb[])' FROM mytable

但我得到:

ERROR: syntax error at or near "["

您可以 cross join from 子句中的 table 和 jsonb_array_elements_text() 允许您根据相应的过滤 where 子句中的记录获得的值。

select t.id,j.* from mytable t cross join 
               jsonb_array_elements_text(cola) as j(val)
 where j.val  IN ( 'postgresql','mysql');

DEMO