Arrays 错误:运算符不存在:jsonb[]->;整数

Arrays 错误:运算符不存在:jsonb[]->;整数,arrays,json,postgresql,jsonb,Arrays,Json,Postgresql,Jsonb,我试图使用这里的运算符获取jsonb的元素 无论我使用“url”还是下面的整数,我都会得到类似的结果 select id,rules from links where id=2; id | rules

我试图使用这里的运算符获取jsonb的元素

无论我使用“url”还是下面的整数,我都会得到类似的结果

select id,rules from links where id=2;
 id |                                                                                   rules                                                                                   
----+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  2 | {"{\"id\": \"61979e81-823b-419b-a577-e2acb34a2f40\", \"url\": \"https://www.wikijob.co.uk/about-us\", \"what\": \"country\", \"matches\": \"GB\", \"percentage\": null}"}
我做错了什么


PS Postgres 9.6.12版。

列是一个数组,您可以使用索引访问第一个元素:

select id,rules->1 from links where id=2;
ERROR:  operator does not exist: jsonb[] -> integer
LINE 1: select id,rules->1 from links where id=2;
                       ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
一定要检查一下

在横向连接中使用可在单独的行中查看所有规则:

select id, rules[1]
from links
where id = 2
您可以通过以下方式获得单个规则:

select id, key, value
from links
cross join jsonb_each(rules[1]) as rule(key, value)
where id = 2
使用
unest()
在数组的所有元素中查找
url
,例如:

select id, value as url
from links
cross join jsonb_each(rules[1]) as rule(key, value)
where id = 2 and key = 'url'

所以,更进一步说,如果我想得到集合中每个规则的结果,比如选择id、规则[*]->“url”…,我该怎么做?是的,我永远也想不到,谢谢!)还有一个问题,这取决于规则[1]。如果有多个规则,比如在我的模式中,它通常可能是[{url:a},{url:b}…];更像规则[*]?@cjm2671-使用
unnest(rules)
获取数组中的所有JSON。这种简化是完全正确的,并产生了更好的计划,因此我用您的解决方案替换了答案中的最后一个查询。谢谢分享。
select id, unnest(rules)->'url' as url
from links
where id = 2;