Postgres jsonb_array_elements

Postgres jsonb_array_elements

我有一个 table 和下一个 jsonb 字段 -

{ "auth": [{"roles": ["role1", "role2"]}]}

当我执行此查询时 -

select jsonb_array_elements(role) as role from (
    select x -> 'roles' as role
    from test,
         jsonb_array_elements(data->'auth') x

输出格式为

role
----
"role1"
"role2"

目前的问题是,如果我尝试添加它不起作用的地方

x.role = '"role1"',但这个确实有效 x.role like '%"role1"%'

谢谢

可以使用 ->> 运算符将“角色”字段恢复为文本数据。

create table test (data jsonb);

insert into test values('{ "auth": [{"roles": ["role1", "role2"]}]}');

with cte as (
   select jsonb_array_elements(role) ->> 0 as role from 
     (
       select x -> 'roles' as role
              from test, jsonb_array_elements(data->'auth') x) y)
select role from cte where role = 'role1';

问题是 jsonb_array_elements returns 结果为 jsonb,将其与字符串文字进行比较会遇到麻烦。

使用 jsonb_array_elements_text 而不是第一个 jsonb_array_elements 调用,那么结果将是 text 类型,这应该不会给您带来麻烦。