如何将 postgres json 列表转换为全小写的 postgres 数组

How to convert a postgres json list to an all lowercase postgres array

我有一个名为 "stuff" 的 table,其中有一个名为 "tags" 的 json 列存储标签列表,还有一个名为 "id" 的列是 table 中每一行的主键。我正在使用 postgres 数据库。例如,一行看起来像这样

   id | tags
   ---|------ 
   1  | ["tag1", "tag2", "tag3"]

我正在尝试编写一个函数来获取具有与名为 "s_tag" 的输入标签变量相匹配的标签的行。但是,我想把所有的标签都转成小写,让标签匹配不区分大小写。

我写了以下测试查询:

     select id from stuff where '"tag1"' = any(select jsonb_array_elements(tags));

此查询返回了所有具有名为 "tag1" 但没有 "TAG1" 标签的行的 ID。

然后我读了this post,所以我尝试了

     select id from stuff where '"tag1"' like any(select jsonb_array_elements(tags));

但是我得到了这个错误:

    ERROR: operator does not exist: unknown ~~* jsonb

那么如何将 json 列表转换成小写的 postgres 数组呢?或者是否有其他方法以不区分大小写的方式搜索标签列表?

您可以获得文本形式的结果而不是 json:

select id 
from stuff 
where 'tag1' = any(select lower(jsonb_array_elements_text(tags)));