我有一个包含下一个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"%'
谢谢
发布于 2021-09-08 15:23:13
可以使用->>操作符将“角色”字段恢复为文本数据。
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';发布于 2021-09-08 15:24:18
问题是jsonb_array_elements以jsonb形式返回结果,而您在将其与字符串文字进行比较时遇到了麻烦。
使用jsonb_array_elements_text而不是第一个jsonb_array_elements调用,那么结果将是text类型,这应该不会给您带来麻烦。
https://stackoverflow.com/questions/69105462
复制相似问题