首页 > 解决方案 > Postgres jsonb_array_elements

问题描述

我有一个带有下一个 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"%'

谢谢

标签: postgresqljsonb

解决方案


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

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';

推荐阅读